我需要在命令行将svg转换为png。我尝试使用imagemagick但是当与旋转变换一起使用时似乎有一个错误,例如这个样本s3.svg:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
<g id="layer1">
<circle cx="200" cy="200" r="200" stroke="black"
stroke-width="0.5" fill="none"/>
<g transform="rotate(48 200 200)">
<path id="path00" style="fill:#dca08c;stroke:#000000;stroke-width:1"
d="M 200,0 L 400,200 L 200,400 L 0,200 z"/>
</g>
</g>
</svg>
我能够在命令行中使用inkscape:
c:\app\inkscape\portable\App\Inkscape\inkscape.com -f s3.svg -e s3.png --export-background=white --export-area=0:652:400:1052
但SVG坐标(0,0)在左上角定义,而在inkscape的导出中,导出区域(0,0)在左下角定义。
如何在没有定义页面高度的幻数1052的情况下使用inkscape导出?
答案 0 :(得分:3)
可能有用的一种方法是将您想要的区域绘制为容器,为其指定ID,然后使用-i id
选项导出该区域。如果包装器不可见,请给它包装空白背景/边框。
编辑(添加示例): 我用过这个xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
<g id="layer1">
<rect width="400" height="600" id="wrapper" fill="none"></rect>
<circle cx="200" cy="200" r="200" stroke="black"
stroke-width="0.5" fill="none"/>
<g transform="rotate(48 200 200)">
<path id="path00" style="fill:#dca08c;stroke:#000000;stroke-width:1"
d="M 200,0 L 400,200 L 200,400 L 0,200 z"/>
</g>
</g>
</svg>
使用此命令(我在Mac上,所以根据需要翻译特定的操作系统)我可以控制输出png的大小/位置:
/Applications/Inkscape.app/Contents/Resources/bin/inkscape -f test.svg -e out.png -i wrapper
我不是svg专家所以我不确定inkscape是否有一些特定的东西,但我总是发现它非常符合Web标准。过去我直接在网页中使用了svg文件。
答案 1 :(得分:2)
您尝试导出的似乎是整个绘图。
inkscape
可以选择使用--export-area-drawing
导出图纸,而不是指定要导出的区域。
c:\app\inkscape\portable\App\Inkscape\inkscape.com -f s3.svg -e s3.png --export-background=white --export-area-drawing
答案 2 :(得分:0)
如果问题是不知道页面高度,那么以下语法可能有帮助吗?
c:\app\inkscape\portable\App\Inkscape\inkscape.com s3.svg -z --query-height
这应该返回文档的像素高度,您可以在导出调用中使用返回的数字。
答案 3 :(得分:0)
Inkscape有画布大小选项,我在导出网页时出现同样的问题 - 您的图像从视口中删除。
更改画布/画板尺寸以满足您要导出的元素的大小