给定SVG路径,如何以编程方式确定其创建的形状的宽度和高度?

时间:2016-04-07 10:14:38

标签: svg

此脚本无人值守,而不是在用户的浏览器中运行,因此没有可用于获取边界框或其他类似技巧的JavaScript或DOM。

我试图解决的问题:

  • 我有几百个SVG字体。
  • 每种字体中的每个字符都由路径定义。
  • 我需要确定每个角色的高度和宽度。
  • 鉴于以下路径描述了角色" e"," e"?
  • 的维度是什么?

M590 -21q-239 0 -381.5 150t-142.5 376v38q0 247 129.5 403.5t370.5 155.5q220 0 345 -132t125 -358v-177h-618l-2 -6q11 -83 68 -136.5t152 -53.5q96 0 153.5 15t145.5 52l80 -206q-71 -52 -183.5 -86.5t-241.5 -34.5zM566 842q-73 0 -109.5 -52t-44.5 -139l3 -5h291v26 q0 82 -34 126t-106 44z

在某些字体中,像小写字母L和大写字母I这样的字母是微不足道的。找到最初的"转移到"位置,并从水平和垂直线减去。但我找不到以编程方式解析路径字符串以查找其创建的形状尺寸的方法。

这里是相同字体的小写L的路径:

M474 0h-337v1456h337v-1456z

路径中使用的简写代码为defined here,但this page更易于阅读。

解决方案

考虑到我的时间限制,我被迫为每个角色创建一个小的SVG文件并将其转换为PNG并修剪PNG以获得角色的尺寸。

但是结果证明我的问题比仅需要角色的尺寸更复杂。某些字体中的字符具有前导空格。我最终需要精确定位字符和字体中定义的字符的前导空格,仅使用字符的宽度时抛出定位。我需要确定角色的宽度和前导空白的宽度。无法使用简单的trim来获取字符的宽度和前导空格,我必须像这样保留这个前导空格:

convert $svg_file_name -gravity West -background white -splice 1x0 -background black -splice 1x0 -trim +repage -chop 1x0 $png_file_name

然后我再次修剪图像以找到角色的尺寸,并在将SVG放置在最终项目中时使用前导空白的大小作为负偏移。

0 个答案:

没有答案