我在像209499.728041
这样的XML文件中有SVG值:
<path id="dwg-object-136" d="M 209499.728041,19994.245007 209499.728041,27254.245007" style="fill:none;stroke:blue;strok e-width:4px" />
<path id="dwg-object-137" d="M 220719.728041,27254.245007 220719.728041,18564.245007" style="fill:none;stroke:blue;strok e-width:4px" />
<path id="dwg-object-138" d="M 220719.728041,19994.245007 209499.728041,19994.245007" style="fill:none;stroke:blue;strok e-width:4px" />
<path id="dwg-object-209" d="M 214304.728041,35614.245007 A 2000.000000,2000.000000 0 0 0 212304.728041,37614.245007" fi ll="none" stroke="blue" stroke-width="0.100000" />
<path id="dwg-object-210" d="M 230819.728041,37614.245007 A 2000.000000,2000.000000 0 0 0 228819.728041,35614.245007" fi ll="none" stroke="blue" stroke-width="0.100000" />
<path id="dwg-object-211" d="M 216007.728041,39574.245007 216007.728041,35614.245007" style="fill:none;stroke:blue;strok e-width:4px" />
有没有办法将所有这些值除以1000,以便209.499728041
?
答案 0 :(得分:2)
如果您只想让SVG内容以1/100比例显示在文件中,最简单的方法是将它们包装在一个公共转换中:
<g transform="scale(0.01)">
<!-- all your paths here -->
</g>
但是,如果你真的想修改路径数据,你可以使用SVG DOM来实现:
// Untested code
function scalePath( path, scaleFactor ){
var scalable = ['x','y','x1','y1','x2','y2','r1','r2'];
for (var i=0,segs=path.pathSegList,len=segs.numberOfItems;i<len;++i){
var seg = segs.getItem(i);
for (var j=scalable.length;j--;){
var prop = scalable[j];
if (prop in seg) seg[prop] *= scaleFactor;
}
}
}
请注意,这(理想情况下)不会触及arc-to命令的angle
,largeArcFlag
或sweepFlag
属性。
你可以通过打开段的pathSegTypeAsLetter
属性并扩展每个段类型的正确属性来使上面的代码稍微提高性能,但是我太懒了,计算机很快。 / p>
如果你这样做是为了在序列化中保存字节,你可能想要舍入值:
if (prop in seg) seg[prop] = Math.round(seg[prop]*scaleFactor);