SVG 具有以下决定其大小的属性:
width="146.91299pt"
height="78.079002pt"
viewBox="0 0 146.913 78.079"
我想400pt
通过命令行将给定的 SVG 缩放到不破坏纵横比的水平。这意味着,必须正确更改上述三个值和以下 svg 代码中的所有点。我不想只更改画布大小,而是要更改整个 svg 图像大小。我不想使用 GUI/手动执行此操作,但我想使用 CLI 执行此操作。
如何通过命令行自动将 SVG 缩放到给定的宽度?
原因:如果图片太小,维基百科的预览效果会很差。请参阅这个图片举个例子。
如何使用 Inkscape-GUI 完成此任务
- Shift+Ctrl+M(变换)
- 缩放(勾选“按比例缩放”)
- 输入宽度
- Shift+Ctrl+D(文档属性)
- 使页面适合所选内容
现在我想要一种自动 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 时它似乎会中断。