在 Inkscape 中将 SVG 批量转换为 PNG 不起作用
Posted
技术标签:
【中文标题】在 Inkscape 中将 SVG 批量转换为 PNG 不起作用【英文标题】:Batch converting SVG to PNG in Inkscape doesn't work 【发布时间】:2016-07-11 21:28:14 【问题描述】:我想将文件夹 C:\Users\Eric\Desktop\svg
中的多个 SVG 文件转换为名称为 [SVG File Name].svg.png
的 512x512 PNG 文件。
我尝试了以下命令:
for /f %f in ('dir /b "C:\Users\Eric\Desktop\svg"') do inkscape -z -e %f.png -w 512 -h 512 %f
命令行正确检测 SVG 文件并遍历它们,但 Inkscape 显示如下:
C:\Users\Eric\Desktop\inkscape>inkscape -z -e [SVG File Name].svg.png -w 512 -h 512 [SVG File Name].svg
** (inkscape.exe:8412): WARNING **: Can't open file: [SVG File Name].svg (doesn't exist)
** (inkscape.exe:8412): WARNING **: Can't open file: [SVG File Name].svg (doesn't exist)
** (inkscape.exe:8412): WARNING **: Specified document [SVG File Name].svg cannot be opened (does not exist or not a valid SVG file)
我在正常的 Inkscape 程序中打开了一个文件,它可以工作。
【问题讨论】:
使用的绝对路径。 @zengr:据我所知,在 Inkscape 0.92.4 中,绝对路径也会发生这种情况。 【参考方案1】:对于 SVG 到 PNG 的转换,我发现 cairosvg (https://cairosvg.org/) 的性能优于 ImageMagick。在您的目录中的所有文件上安装和运行的步骤。
pip3 install cairosvg
在包含 .svg 文件的目录中打开一个 python shell 并运行:
import os
import cairosvg
for file in os.listdir('.'):
if os.path.isfile(file) and file.endswith(".svg"):
name = file.split('.svg')[0]
cairosvg.svg2png(url=name+'.svg',write_to=name+'.png')
这也将确保您不会覆盖原始 .svg 文件,但会保持相同的名称。然后,您可以使用以下命令将所有 .png 文件移动到另一个目录:
$ mv *.png [new directory]
【讨论】:
感谢这篇文章。请将 import cairosvg 添加到导致我发现一些问题的导入中 是的。我这样做了,我还用额外的 if 语句改进了脚本。【参考方案2】:Inkscape 是一个很好的程序。 有时我们不了解它的可能性。 为了获得更好的性能,您应该使用 shell 模式。 此模式包含 2 个步骤:
-
创建一个文件,其中包含要执行的命令。
在 Windows 控制台或 bash 中使用
type .\command.txt | inkscape --shell
其中command.txt
您的文件名运行此文件。
在输入inkscape --shell
之后,位于action-list
中的所有命令。
例如,如果你想将 SVG 转换为 png,你的 txt 文件应该包含:
file-open:1.svg; export-filename:1.png; export-do; file-close
file-open:2.svg; export-filename:2.png; export-do; file-close
语法是command
:arg
; command2
:arg2
;等等
您可以使用自己喜欢的语言(如 C++、Java、C# 或 Python)创建此文件。
附言
它比在 PowerShell 中对每个文件使用 inkscape
命令更快,但不要长时间使用它,因为它有内存泄漏:
Link to Gitlab
【讨论】:
以上是关于在 Inkscape 中将 SVG 批量转换为 PNG 不起作用的主要内容,如果未能解决你的问题,请参考以下文章