如何通过命令行缩放 SVG?

Mar*_*oma 19 inkscape svg command-line

SVG 具有以下属性,它们决定了它的大小:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"
Run Code Online (Sandbox Code Playgroud)

我想在400pt不破坏纵横比的情况下通过命令行将给定的 SVG 缩放到 with 。这意味着,必须正确更改上述三个值以及以下 svg 代码中的所有点。我不想只改变画布大小,而是整个 svg 图像大小。我不想用 GUI/手动来做,但我想用 CLI 来做。

如何通过命令行自动将 SVG 缩放到给定的宽度?

原因:如果图片太小,维基百科的预览效果不好。请参阅此图像作为示例。

我将如何使用 Inkscape-GUI 完成此任务

  1. Shift+Ctrl+M(变换)
  2. 比例(选中“按比例缩放”)
  3. 输入宽度
  4. Shift+Ctrl+D(文档属性)
  5. 使页面适合选择

现在我想要一个自动的 CLI 方式来做到这一点。

顺便说一下,inkscape 只是简单地应用了

<g transform="matrix(1.6838397,0,0,1.6838397,-3.3543029,-3.3542794)"
 id="surface0">
Run Code Online (Sandbox Code Playgroud)

到整个图像。

小智 20

rsvg-convertlibrsvg2-bin包中可以调整 svg 的大小。

有关完整说明,请参阅此答案

  • `rsvg-convert -a -w 500 -f svg Vector-triangle-inequality.svg -o Result.svg` 有效。但是 rsvg-convert 似乎不仅仅是调整大小。 (5认同)
  • @moose,然而,正如那个答案所指出的,rsvg-convert 使用点,而不是像素。如果幸运的话,您可以将您想要的尺寸除以 1.25。但是,如果您想要 24px(19.2 磅)之类的东西,那您就不走运了,因为它不愿意将非整数作为宽度或高度(不确定 SVG 是否允许这样做)。 (2认同)

ter*_*don 7

如果您只想更改一张图像,请在文本编辑器(例如 emacs)中打开它并更改宽度条目。

对于极客,仅 CLI 的方法,请使用 sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg
Run Code Online (Sandbox Code Playgroud)

但这不会缩放图像,只会设置其宽度。


一种更好的方法,也许,但肯定可以在批处理模式下为许多图像运行的方法是从命令行使用inkscape:

$ inkscape -z -e out.png -w 400 -h 400 in.svg
Run Code Online (Sandbox Code Playgroud)

对于许多文件(假设您希望它们都具有相同的宽度),请执行以下操作。它需要转换为 png 并假设您的文件名中没有空格:

$ for n in $(ls *svg | sed 's/.svg//'); do inkscape -z -e $n.png -w 400 -h 400 $n.svg; done
Run Code Online (Sandbox Code Playgroud)

ImageMagick的 convert 是我的第一选择,但在缩放 svgs 时它似乎坏了。

  • 您的inkscape-command 结果为PNG,但我想要一个SVG。您的 svg 命令只会更改画布大小,而不会更改图像的大小。您不能简单地使用文本编辑器而只更改我上面提到的值。我想我必须澄清这个问题。 (9认同)