"该代码片段展示了如何在Java中解析SVG(可缩放矢量图形)文件,以获取图像的原始分辨率,即实际的width和height属性,而不是基于viewBox的虚拟尺寸。它避免了viewBox可能导致的虚假尺寸,提供真实图片的大小信息。" 在Java中处理SVG文件时,通常需要解析XML文档来获取内部元素的属性,例如SVG图像的宽度和高度。这段代码使用了Apache Batik库,这是一个用于处理SVG的开源工具包,它提供了对SVG文档的解析和操作功能。 首先,代码创建了一个`File`对象,代表要处理的SVG文件路径。然后,通过`XMLResourceDescriptor.getXMLParserClassName()`获取默认的XML解析器类名,这里可能返回如`org.apache.xerces.parsers.SAXParser`这样的值,依赖于系统环境。 接着,创建了一个`SAXSVGDocumentFactory`实例,这是Batik提供的一个工厂类,用于根据指定的XML解析器创建SVG文档。工厂类被用来解析SVG文件并将其转换为`Document`对象,这是一个XML或HTML文档的树形表示。 `Document`对象获取后,代码获取了文档的根元素,即SVG元素。在SVG文件中,根元素通常是`<svg>`标签,包含了图像的所有信息。然后遍历`Document`的子节点,寻找`<svg>`元素。一旦找到,就可以从中提取`width`和`height`属性,这些属性定义了SVG图像的原始分辨率。 注意,这段代码中的一些打印语句(例如`System.out.println()`)是用于调试的,它们显示了节点的各种信息,包括节点名称、文本内容、节点类型等。在实际应用中,你只需要关注获取到的`width`和`height`值,可以将这些打印语句移除或者替换为存储或处理这些值的代码。 获取宽度和高度的方法可能是这样的: ```java Node svgNode = nld.item(id); String width = svgNode.getAttributes().getNamedItem("width").getTextContent(); String height = svgNode.getAttributes().getNamedItem("height").getTextContent(); ``` 这样,`width`和`height`变量就分别包含了SVG文件中定义的实际宽度和高度。这些信息对于需要正确显示或处理SVG图像的任何应用程序都是非常重要的,比如在网页布局、图形设计或图像处理软件中。
// String path = "D:\\个人\\项目\\EPC\\优化需求20190603\\";
// File file = new File(path + "FHC000008-01-A.svg");
File file = new File(svgPath);
String heightAndwidth = "";
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
Document doc = f.createDocument(file.toURI().toString());
Element element = doc.getDocumentElement();
// System.out.println(convertElemToSVG(element));
NodeList nld = doc.getChildNodes();
for (int id = 0; id < nld.getLength(); id++) {
if (nld.item(id).getNodeName() != "svg") {
continue;
}
// System.out.println(id + ":" + nld.item(id).getTextContent());
// System.out.println(id + ":" + nld.item(id).getNodeName());
// System.out.println(id + ":" + nld.item(id).getNodeValue());
// System.out.println(id + ":" + nld.item(id).getNodeType());
// System.out.println(id + ":" + nld.item(id).getNamespaceURI());
// System.out.println(id + ":" + nld.item(id).getUserData("image"));
// System.out.println(id + "n:" + nld.item(id).getChildNodes().getLength());
// if (nld.item(id).getAttributes() != null) {
// System.out.println(id + "a:" + nld.item(id).getAttributes().getLength());
// }
if (nld.item(id).getChildNodes().getLength() > 0) {
NodeList nldc = nld.item(id).getChildNodes();
for (int idc = 0; idc < nldc.getLength(); idc++) {
if (nldc.item(idc).getNodeName() != "image") {
continue;
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 4
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展