将 SVG 图像批量转换为所需大小的 PNG 或 ICO

Kus*_*hal 32 icons svg command-line conversion

我有一堆 SVG 图标,我想用于我在 VB.Net 2010 中开发的应用程序,由于它不支持处理 SVG 图标,我需要将这些图标转换为 PNG 或 ICO,首选输出分辨率。我发现了这样的 Ubuntu 命令行工具,名为rsvgconvert. 我们是否也有适用于 Windows 的此类工具?

zet*_*tah 29

ImageMagick 不应立即关联到任何涉及图像的批处理任务。特别是在这种情况下,ImageMagick 是 SVG 转换的糟糕解决方案。

最好在命令行上尝试Inkscape

inkscape in.svg --export-type=png --export-filename=out.png

  • 为什么说inkscape比ImageMagick好?我不反对(或同意),只是想了解更多细节。 (9认同)
  • 这是来自 Image Magic 网站:_ImageMagick 如果它在您的执行路径中,则使用 inkscape,否则使用 RSVG。如果两者都不可用,ImageMagick 将恢复到其内部 SVG 渲染器。IM 的人员知道 InkScape 转换器比其他工具更好,他们首先尝试使用它进行 SVG 转换。 (2认同)

Mat*_*Mat 12

ImageMagick有一个命令行工具,可用于 Linux 和 Windows(以及其他)。转换器工具被方便地称为“转换”。这是一些使用文档

您可以在此处获取Windows 安装程序


Ava*_*tar 8

命令行无法立即使用,而且我想要转换 100 个文件。这是我如何使其与 Windows 7 一起使用:

  1. 安装inkscape - 不是便携式的!

  2. 将所有 svg 文件复制到一个文件夹中,例如“C:\svgs\”:

  3. 您创建一个convert.bat包含此行的文件:

    FOR %%A IN (*.svg) DO "C:\Program Files (x86)\Inkscape\inkscape.exe" --export-png=%%A.png
    
    Run Code Online (Sandbox Code Playgroud)

    (指向正确的安装文件夹):

  4. 以管理员身份打开 CMD!为此,请按 WIN 键,键入 cmd,右键单击“cmd.exe”并选择“以管理员身份运行”。

  5. 导航到您的“C:\svgs\”并键入convert.bat -- 所有 svg 文件都将转换为 PNG。

  6. 使用 Windows 资源管理器搜索转换后的 PNG 文件。在我的电脑上,它们在文件夹中:C:\Users\myname\AppData\Local\VirtualStore\Program Files (x86)\Inkscape\svgs

希望有帮助。


由于命令行的分辨率只能在我所见的范围内设置为固定的,因此我最终使用了InkscapeBatch 工具。在那里我可以设置 DPI 以相对增加所有图像。

您需要指定正确的设置,否则它将不起作用。这是我所做的:

在此处输入图片说明

在此处输入图片说明

点击“完成”后,您需要按下工具栏中的“启动批量转换器...”按钮:

在此处输入图片说明

  • 您的批处理命令可能缺少另一个“%%A”(作为输入文件名)。另外,为什么你认为它只能在管理模式下工作? (2认同)

小智 6

对于 SVG 到 PNG 的转换,我发现 cairosvg ( https://cairosvg.org/ ) 的性能比 ImageMagick 好。在目录中的所有文件上安装和运行的步骤。

pip3 install cairosvg
Run Code Online (Sandbox Code Playgroud)

在包含 .svg 文件的目录中打开一个 python shell 并运行:

import os

for file in os.listdir('.'):
    name = file.split('.svg')[0]
    cairosvg.svg2png(url=name+'.svg',write_to=name+'.png') 
Run Code Online (Sandbox Code Playgroud)

这也将确保您不会覆盖原始 .svg 文件,但会保持相同的名称。然后,您可以使用以下命令将所有 .png 文件移动到另一个目录:

$ mv *.png [new directory]
Run Code Online (Sandbox Code Playgroud)


kyn*_*nan 5

这里给出的大多数答案都会忽略问题的所需大小部分。convert当“升级”SVG 时,我无法获得令人满意的结果。inkscape做得更好,并且还保留了背景透明度。

根据您的使用案例,使用以下选项之一:

  1. 以指定 DPI 导出:inscape in.svg -d 300 -e out.png
  2. 以指定宽度导出(保持纵横比):inscape in.svg -w 800 -e output.png
  3. 以指定高度导出(保持纵横比):inscape in.svg -h 600 -e output.png

请注意,指定宽度和高度不会保留纵横比。

要一次转换多个文件,请根据您的使用案例(在bash或兼容)中调整以下内容:

for f in *.svg; do
  inkscape "$f" -d 300 -e "${f%.*}.png"
done
Run Code Online (Sandbox Code Playgroud)