使用 Fontforge 在路径 D 中集成 SVG 字形上的转换

问题描述

我正在使用 Fontforge 脚本语言从 SVG 字体转换一组 SVG 字形。 字体包含这样的字形:

<glyph glyph-name="clefs.G" unicode="&#xe173;" horiz-adv-x="632" d="M0 110c0 215 186 392 288 468c9.352 6.968 17.347 12.617 18 24c7 122 9.4 176.907 54 278c45 102 107 184 184 228c7.23684 4.13584 15.183 6.42546 22.7637 6.42546c9.79544 0 18.9806 -3.82293 25.2363 -12.4255c16 -22 40 -80.42 40 -136
c0 -170 -29.869 -244.325 -116 -368c-39 -56 -86 -96 -142 -150c-11.718 -11.3 -20 -19.721 -20 -36c0 -33 1 -54 2 -84c0.444 -13.334 5.858 -26 20 -26c150 0 226 -98.671 226 -222c0 -193 -99 -274 -186 -314c-13.0704 -6.00884 -22.1023 -15.7141 -22.1023 -29.439
c0 -38.7514 4.80574 -60.5199 6.10231 -98.561c0.273059 -8.00973 0.410309 -15.9159 0.410309 -23.7114c0 -163.496 -60.3732 -278.289 -194.41 -278.289c-144 0 -222 62 -222 172c0 71.169 58.6562 128 130 128c56 0 108 -46 108 -106c0 -57.14 -48 -112 -94 -112
c-11.2317 0 -17.436 -5.48931 -17.436 -12.9676c0 -15.977 28.3192 -41.0324 96.436 -41.0324c98.0694 0 159.682 96.0338 159.682 242.823c0 8.87684 -0.225319 17.9393 -0.681519 27.1774c-1.814 36.725 -5 59 -12 94c-1.92389 9.61946 -17.193 22.0593 -27.7681 22.0593
c-0.418347 0 -0.829348 -0.0194681 -1.23189 -0.059349c-10.8939 -1.07911 -21.5263 -1.60469 -31.8954 -1.60469c-191.419 0 -293.105 179.115 -293.105 361.605zM384 -186c0.907222 -11.4095 12.1661 -20.6274 23.2932 -20.6274
c2.62198 0 5.23664 0.511837 7.70681 1.62745c59.9487 27.0736 129.247 107.438 129.247 199.509c0 3.1505 -0.0811394 6.31471 -0.246569 9.49096c-4 81 -73 147 -147 147c-14.7012 0 -35.0254 -1.91246 -35.0254 -16.1184c0 -122.456 15.0882 -233.671 22.0254 -320.882z
M296 374c-39 -15 -228 -192 -228 -331c0 -143.481 70.2845 -265.054 253.291 -265.054c2.21987 0 4.45633 0.0178881 6.70945 0.0538421c11.8438 0.188871 23.0092 7.75431 23.0092 18.4651c0 115.898 -10.0273 196.81 -18.0092 318.535
c-0.727071 11.0834 -11.5494 19.9434 -22.1976 19.9434c-1.96144 0 -3.91696 -0.300628 -5.80239 -0.943364c-44 -15 -92 -74 -92 -118c0 -47 11 -73 25 -114c1.03459 -3.03008 1.49083 -5.71071 1.49083 -8.01411c0 -6.38185 -3.50223 -9.86803 -7.90945 -9.86803
c-3.73762 0 -8.12614 2.50732 -11.5814 7.88214c-22.407 34.8555 -38 86 -38 125c0 113.78 21 218 120 266c10.5825 5.1316 20.0214 10.357 20.0214 22.0275c0 23.1773 -0.01389 39.894 -2.02137 60.9725c-0.934 9.805 -14.667 11.59 -24 8zM358 634c54 46 84 71 143 126
c56.099 52.296 103 129 103 169c0 28.16 -4.54 65 -33 65c-37 0 -138.453 -94.759 -175 -139c-38 -46 -55 -135 -57 -211c-0.212 -8.06 12.452 -15.578 19 -10z" />

我想知道是否有任何方法可以在转换时应用转换(特别是我想将 Y 轴缩放 -1,因此垂直翻转字形以使其可用),并将该转换的效果保存在生成​​的字形中?例如。我有以下脚本

Open($1);
SelectWorthOutputting();
#VFlip(-1);
foreach
    if (GlyphInfo("Name")=="clefs.G")
    bBox = GlyphInfo("BBox");
    Print(bBox);
    Export("/tmp/SMT-GClef.svg");
    endif;
endloop;

我用字体作为参数调用它。这会将指定的字形导出为 SVG 文件 (/tmp/SMT-GClef.svg):

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="-16 -665 632 1000">
  <g transform="matrix(1 0 0 -1 0 800)">
   <path fill="currentColor"
d="M0 110c0 215 186 392 288 468c9.352 6.968 17.347 12.617 18 24c7 122 9.4 176.907 54 278c45 102 107 184 184 228c7.23684 4.13584 15.183 6.42546 22.7637 6.42546c9.79544 0 18.9806 -3.82293 25.2363 -12.4255c16 -22 40 -80.42 40 -136
c0 -170 -29.869 -244.325 -116 -368c-39 -56 -86 -96 -142 -150c-11.718 -11.3 -20 -19.721 -20 -36c0 -33 1 -54 2 -84c0.444 -13.334 5.858 -26 20 -26c150 0 226 -98.671 226 -222c0 -193 -99 -274 -186 -314c-13.0704 -6.00884 -22.1023 -15.7141 -22.1023 -29.439
c0 -38.7514 4.80574 -60.5199 6.10231 -98.561c0.273059 -8.00973 0.410309 -15.9159 0.410309 -23.7114c0 -163.496 -60.3732 -278.289 -194.41 -278.289c-144 0 -222 62 -222 172c0 71.169 58.6562 128 130 128c56 0 108 -46 108 -106c0 -57.14 -48 -112 -94 -112
c-11.2317 0 -17.436 -5.48931 -17.436 -12.9676c0 -15.977 28.3192 -41.0324 96.436 -41.0324c98.0694 0 159.682 96.0338 159.682 242.823c0 8.87684 -0.225319 17.9393 -0.681519 27.1774c-1.814 36.725 -5 59 -12 94c-1.92389 9.61946 -17.193 22.0593 -27.7681 22.0593
c-0.418347 0 -0.829348 -0.0194681 -1.23189 -0.059349c-10.8939 -1.07911 -21.5263 -1.60469 -31.8954 -1.60469c-191.419 0 -293.105 179.115 -293.105 361.605zM384 -186c0.907222 -11.4095 12.1661 -20.6274 23.2932 -20.6274
c2.62198 0 5.23664 0.511837 7.70681 1.62745c59.9487 27.0736 129.247 107.438 129.247 199.509c0 3.1505 -0.0811394 6.31471 -0.246569 9.49096c-4 81 -73 147 -147 147c-14.7012 0 -35.0254 -1.91246 -35.0254 -16.1184c0 -122.456 15.0882 -233.671 22.0254 -320.882z
M296 374c-39 -15 -228 -192 -228 -331c0 -143.481 70.2845 -265.054 253.291 -265.054c2.21987 0 4.45633 0.0178881 6.70945 0.0538421c11.8438 0.188871 23.0092 7.75431 23.0092 18.4651c0 115.898 -10.0273 196.81 -18.0092 318.535
c-0.727071 11.0834 -11.5494 19.9434 -22.1976 19.9434c-1.96144 0 -3.91696 -0.300628 -5.80239 -0.943364c-44 -15 -92 -74 -92 -118c0 -47 11 -73 25 -114c1.03459 -3.03008 1.49083 -5.71071 1.49083 -8.01411c0 -6.38185 -3.50223 -9.86803 -7.90945 -9.86803
c-3.73762 0 -8.12614 2.50732 -11.5814 7.88214c-22.407 34.8555 -38 86 -38 125c0 113.78 21 218 120 266c10.5825 5.1316 20.0214 10.357 20.0214 22.0275c0 23.1773 -0.01389 39.894 -2.02137 60.9725c-0.934 9.805 -14.667 11.59 -24 8zM358 634c54 46 84 71 143 126
c56.099 52.296 103 129 103 169c0 28.16 -4.54 65 -33 65c-37 0 -138.453 -94.759 -175 -139c-38 -46 -55 -135 -57 -211c-0.212 -8.06 12.452 -15.578 19 -10z" />
  </g>

</svg>

转换保存在 g transformviewBox 中的位置。但是,我希望在 path d 属性中进行这些转换,以便我可以将 path d 字符串用作其他应用程序中的形状。

有人可以帮忙吗?

解决方法

到目前为止,我想出的唯一解决方案是 Scale(100,-100) 选定的字形,这将返回一个带有路径 d 的 svg 文件,这样当我删除 viewBox 和 g 转换时从中,我得到了垂直翻转和正确的字形形状。我仍然不确定这会带来什么其他副作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)