2

我需要在命令行将 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 导出?

4

4 回答 4

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 是否有一些特定的功能,但我一直觉得它非常符合网络标准。过去我直接在网页中使用它的 svg 文件。

于 2013-03-02T06:30:10.410 回答
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
于 2013-02-28T14:15:50.970 回答
0

Inkscape 有画布大小选项,我在为网络导出时遇到了同样的问题 - 你的图像从视口中掉了出来。

更改画布/画板大小以满足您要导出的元素的大小

于 2013-03-03T10:24:02.690 回答
0

如果问题是不知道页面高度,那么以下语法可能会有所帮助?

c:\app\inkscape\portable\App\Inkscape\inkscape.com s3.svg -z --query-height

这应该返回文档的像素高度,您可以在导出调用中使用返回的数字。

于 2013-03-01T02:03:18.380 回答