在 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何为响应式网页设计准备 Inkscape SVG 文件?

为什么我的生成svg文件在Inkscape和(Chrome)浏览器中显示的不同?

将 svg 转换为图像的库? [关闭]

如何将 SVG 文件转换为 HTML5 的画布?

科研小技巧之svg格式转pdf

将 JavaScript 生成的 SVG 转换为文件