如何通过命令行缩放 SVG?

如何通过命令行缩放 SVG?

SVG 具有以下决定其大小的属性:

width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"

我想400pt通过命令行将给定的 SVG 缩放到不破坏纵横比的水平。这意味着,必须正确更改上述三个值以下 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">

整个图像。

答案1

rsvg-convert可以从librsvg2-bin包中调整 svg 的大小。

这个答案了解完整说明。

答案2

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

对于更专业、仅使用 CLI 的方法,请使用 sed:

$ sed 's/width=\"146.91299pt\"/width=\"400pt\"/' orig.svg > new.svg

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


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

$ inkscape -z -e out.png -w 400 -h 400 in.svg

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

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

图像魔术师的转换是我的首选,但是在缩放 svgs 时它似乎会中断。

相关内容