用Java读取svg路径数据的最简单方法? [复制]

2023-12-10

我希望使用 svg 图像并解析/处理不同的路径来进行自定义转换。在Java中,简单提取路径数据的最简单方法是什么?我正在查看 apache xmlgraphics/batik 包,但如何返回路径类型和参数并不明显。有什么建议么?


为了简单地提取path您可以使用 XPath 获取数据。

假设你有这个 SVG 并且你想提取所有path数据(来自双方path元素):

<svg>
  <rect x="1" y="1" width="1198" height="598"
        fill="none" stroke="blue" stroke-width="1" />

  <path d="M200,300 Q400,50 600,300 T1000,300"
        fill="none" stroke="red" stroke-width="5"  />
  <g fill="black" >
    <circle cx="200" cy="300" r="10"/>
    <circle cx="600" cy="300" r="10"/>
    <circle cx="1000" cy="300" r="10"/>
  </g>
  <g fill="#888888" >
    <circle cx="400" cy="50" r="10"/>
    <circle cx="800" cy="550" r="10"/>
  </g>
  <path d="M200,300 L400,50 L600,300 L800,550 L1000,300"
        fill="none" stroke="#888888" stroke-width="2" />
</svg>

首先将 XML 作为文档加载:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("image.svg");

然后使用 XPath 选择所需的节点。下面的表达式选择的内容d所有的属性path文件内的元素:

String xpathExpression = "//path/@d";

现在我们可以实例化 XPath 处理器并编译表达式:

XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
XPathExpression expression = xpath.compile(xpathExpression);

由于预期结果是一个节点集(两个字符串),我们使用以下方法计算 SVG 文档上的表达式XPathConstants.NODESET作为第二个参数:

NodeList svgPaths = (NodeList)expression.evaluate(document, XPathConstants.NODESET);

从那里您可以使用以下命令提取第一组路径数据:

svgPaths.item(0).getNodeValue();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Java读取svg路径数据的最简单方法? [复制] 的相关文章

随机推荐

  • 在 Python 脚本中获取当前的 git 哈希值

    我想在 Python 脚本的输出中包含当前的 git 哈希 作为版本号生成该输出的代码 如何在 Python 脚本中访问当前的 git 哈希值 无需绕过从git命令自己 GitPython是一个非常好的方法来做到这一点和许多其他git东西
  • 如何创建一个仅引导用户在 Google Play 上下载完整版本的存根应用程序?

    只是想创建一个存根应用程序 该应用程序启动后除了引导用户在 Google Play 上下载完整版本之外什么也不做 我假设存根 apk 显然需要相同的包名称 使用相同的证书签名 但版本代码较低 一直只指向 Google Play 产品页面 这
  • ReportNG不提供任何报告

    我听说 ReportNG 创建的报告比 TestNG 的正常报告更好 我尝试创建 ReportNG 报告 但失败了 我正在使用 Eclipse 我已经下载了 ReportNG 并将reportng 1 1 3 jar 和velocity d
  • 如何从 U-Boot 启动裸板二进制文件?

    我们如何从 U Boot 启动独立的裸板二进制文件 不是使用 U Boot 环境运行的独立二进制文件 而不是 Linux 内核 我的要求是使用我的二进制文件重新初始化主板和驱动程序 我可以用我的二进制文件替换启动介质 此处为 NOR 闪存
  • 单击时更改 MenuItem 可见性

    我正试图隐藏一个MenuItem并在选择第一个时使另一个可见 每个 ID 为 pencil R id button routines edit check mark R id button routines edit done 这里是相关代
  • 使用 null 参数调用 super.onCreate() ?

    In onCreate Bundle bdl 我们必须通过以下方式调用它的超级构造函数super onCreate bdl 对于新创建的活动 我们得到了一个 null BundleonCreate Bundle bdl 所以当我们打电话时s
  • 如何配置任务以在 VSC IDE(版本 2.0.0)中启动 .ps1 脚本?

    我想使用 Visual Studio Code IDE VSC 在 MQL 而不是本机 MetaEditor IDE 中进行开发 如下所述 如何在 Visual Studio 中编码和编译 MQL5 我的问题涉及编译过程 其中包含调用 Po
  • 如何阻止 UIScrollView 吞咽触摸

    I have UIScrollView有很多子视图 当我滚动时 我想点击要拖动的子视图 有没有一种可能的方法可以使UIScrollView停止吞咽接触 或者 当您取消滚动时是否可以开始新的触摸 就像它滚动并且我点击它一样 子视图也会被点击
  • 使用 ansible 创建 jenkins 工作

    我正在开发一个项目 使用 ansible 在 centos7 上部署 jenkins CI 服务器 我在使用 ansible 从 xml 模板创建 jenkins 作业时遇到问题 到目前为止 一切工作正常 但现在我希望能够创建作业 并使用
  • 如何禁用在肥皂中编码的身体数据,改造请求

    我有一个请求数据 其中一个元素采用 xml 作为值 使用以下方式将数据发送到服务器时 Body我的内部 xml 正在被编码 html 编码 因为该服务在服务器端失败 如何禁用内部xml 正在编码 sample
  • MPMovieplayerController 在后台时不播放下一个 URL

    我正在开发一个 iOS 应用程序 在其中使用 MPMoviePlayerController 流式传输 mp3 文件 当一个文件的播放完成时 我获取下一个 url 并播放该文件 所有内容在前台都运行良好 但是当我将应用程序移动到后台时 当前
  • 根据政策列表进行授权

    我正在开发不同的应用程序 每个应用程序都有自己的角色成员 在 Startup cs 中 var c configuration GetSection nameof Configuration Get
  • R:将标签从矩阵添加到图形

    我正在使用 R 编程语言 我生成了这个随机网络图和矩阵 library tidyverse library visNetwork library htmlwidgets set seed 123 mat lt matrix runif 19
  • 卸载后如何打开网站?

    软件安装后我可以打开一个网站 如下所示 Run Filename http example com Flags shellexec runasoriginaluser 有没有办法在软件卸载后打开另一个网站 要在卸载完成后打开不可执行的文件
  • CPAN 将模块安装到 perl5 而不是 site_perl

    我正在尝试将一些 cpan 模块临时安装到自定义文件夹 tmp perl 中 所以我修改了构建安装基础 o conf mbuildpl arg install base tmp perl o conf makepl arg INSTALL
  • 从 C# 代码将数据插入 SQL Server

    我有一张桌子student id name 然后我有一个文本框 用于输入名称 当单击提交按钮时 它将数据插入数据库 那么我怎样才能只插入名称 而不插入id 因为id是自动递增的呢 我试过这个 insert into student id n
  • Maven 和 Eclipse 使用的 Checkstyle 配置

    我尝试在 Maven 和 Eclipse 中使用相同的 Checkstyle 配置文件 模块 SuppressionCommentFilter 在 Eclipse 中按预期工作 但 Maven 报告 不允许 TreeWalker 作为 Su
  • 具有相同内容的两个字符串何时(不)共享相同的内存?

    来自问题两个内容相同的字符串会存储在同一个内存位置吗 拥有Java代码 String s1 Java 该字符串是否会分配在同一内存位置 或多个 是否多次启动同一个程序并并行 同时 执行它 可能的答案 我目前是 C 开发人员 尽管在上个世纪是
  • 将值数组发送到 Oracle 过程以在 WHERE IN 子句中使用

    我在Oracle中有一个存储过程 如下所示 CREATE PROCEDURE MY TEST PROC CUR OUT SYS REFCURSOR PARAM THAT WILL BE USED INSIDE WHERE IN AS BEG
  • 用Java读取svg路径数据的最简单方法? [复制]

    这个问题在这里已经有答案了 我希望使用 svg 图像并解析 处理不同的路径来进行自定义转换 在Java中 简单提取路径数据的最简单方法是什么 我正在查看 apache xmlgraphics batik 包 但如何返回路径类型和参数并不明显