在 Java 中读取 SVG 路径
Reading SVG path in Java
我正在阅读 java 中的文本文件,我在其中使用扫描仪 class 阅读 SVG 格式的文本。我看过推荐蜡染的答案。我想知道如何仅在 SVG 格式的路径数据上使用 Batik。我想评估路径并提取可以追踪路径的点。我可以使用 Batik 执行此操作而不必在 Batik 中评估整个文件吗?
我试图创建自己的路径解析器,但我没有足够的时间或技能来这样做。我正在通过使用 < and />
拆分它们来评估 SVG 格式的标签,并且我坚持评估路径的 d 属性。这是我需要评估的路径示例:
<html>
<body>
<svg width="10000" height="1000">
<path id="square" fill="#0000FF"
d="M351.3,251 l-3.1-2.2c-0.3-0.2-0.3-0.5-0.1-0.8l2.2-3.1c0.2-0.3,0.5-0.3,0.8-0.1l3.1,2.2
c0.3,0.2,0.3,0.5,0.1,0.8l-2.2,3.1C355,251.1,354.6,251.2,354.3,251z"/>
</body>
</html>
我需要这条路上的点。
用 Batik 解析的路径看起来很简单:
看来您只需要创建一个实现 PathHandler
接口的 class。
class MyPathHandler implements PathHandler
{
void startPath() { ... }
void movetoAbs(float x, float y)
... etc...
void endPath() { ... }
}
然后做:
PathParser parser = new PathParser();
parser.setPathHandler(new MyPathHandler());
parser.parse("M351.3,251 l-3.1-2.2 ... snip ... C355,251.1,354.6,251.2,354.3,251z");
parser.doParse();
只要 PathParser 遇到 M
命令等,就会调用 moveToAbs()
方法
如果这不起作用,那么在大约一分钟的谷歌搜索中,我能够在 Java 或 JS 中找到至少四五个 SVG 路径解析代码实例。
至于采样部分。这要棘手得多。您需要代码来测量二次和三次贝塞尔曲线以及圆弧的长度。后者可能涉及将弧 (A
/a
) 转换为中心参数化(规范中有关于如何执行此操作的信息)。做这一切并非易事。如果你能在 Batik、Firefox、Chrome、Android 等中找到它,就会有它的代码。也许还有一些已经有人构建的代码。
如果您在浏览器中执行此操作会很容易。已经有问题在这里提出和回答了。
我正在阅读 java 中的文本文件,我在其中使用扫描仪 class 阅读 SVG 格式的文本。我看过推荐蜡染的答案。我想知道如何仅在 SVG 格式的路径数据上使用 Batik。我想评估路径并提取可以追踪路径的点。我可以使用 Batik 执行此操作而不必在 Batik 中评估整个文件吗?
我试图创建自己的路径解析器,但我没有足够的时间或技能来这样做。我正在通过使用 < and />
拆分它们来评估 SVG 格式的标签,并且我坚持评估路径的 d 属性。这是我需要评估的路径示例:
<html>
<body>
<svg width="10000" height="1000">
<path id="square" fill="#0000FF"
d="M351.3,251 l-3.1-2.2c-0.3-0.2-0.3-0.5-0.1-0.8l2.2-3.1c0.2-0.3,0.5-0.3,0.8-0.1l3.1,2.2
c0.3,0.2,0.3,0.5,0.1,0.8l-2.2,3.1C355,251.1,354.6,251.2,354.3,251z"/>
</body>
</html>
我需要这条路上的点。
用 Batik 解析的路径看起来很简单:
看来您只需要创建一个实现 PathHandler
接口的 class。
class MyPathHandler implements PathHandler
{
void startPath() { ... }
void movetoAbs(float x, float y)
... etc...
void endPath() { ... }
}
然后做:
PathParser parser = new PathParser();
parser.setPathHandler(new MyPathHandler());
parser.parse("M351.3,251 l-3.1-2.2 ... snip ... C355,251.1,354.6,251.2,354.3,251z");
parser.doParse();
只要 PathParser 遇到 M
命令等,就会调用 moveToAbs()
方法
如果这不起作用,那么在大约一分钟的谷歌搜索中,我能够在 Java 或 JS 中找到至少四五个 SVG 路径解析代码实例。
至于采样部分。这要棘手得多。您需要代码来测量二次和三次贝塞尔曲线以及圆弧的长度。后者可能涉及将弧 (A
/a
) 转换为中心参数化(规范中有关于如何执行此操作的信息)。做这一切并非易事。如果你能在 Batik、Firefox、Chrome、Android 等中找到它,就会有它的代码。也许还有一些已经有人构建的代码。
如果您在浏览器中执行此操作会很容易。已经有问题在这里提出和回答了。