在Mac OS X上将SVG转换为PNG的命令行应用程序


166

是否有在Mac OS X上运行的可以将SVG转换为PNG的命令行程序?

编辑:Dylan B在ImageMagick上有很好的答案。作为参考,要使用MacPorts在Mac OS X上安装具有SVG支持的ImageMagick,请执行

port install imagemagick +rsvg

2
我找到了一种方法,如果您有Google Chrome浏览器...并且不需要安装任何其他东西:superuser.com/questions/134679/…–
nopole

cairosvg.org 适用于python3,似乎没有问题。pip3 install cairosvg
JayRizzo

Answers:


233

或不安装任何东西:

qlmanage -t -s 1000 -o . picture.svg 

它将产生picture.svg.png,其宽度为1000像素。

我仅在OS X 10.6.3上进行了测试。


38
不幸的是,这将图像裁剪为正方形。
马丁·彼得

7
啊,qlmanage -t给出快速查找(在Finder等中)使用的缩略图。聪明的主意。不幸的是,这些缩略图可能有问题,特别是涉及文本时。
ShreevatsaR 2011年

7
这将在第一象限中生成带有svg文件的图像。不自动裁剪。尝试从名词项目转换文件-希望它能起作用。
Alex Cook 2012年

7
该解决方案未能考虑透明度。rsvg-convert@ahti的答案中的工具对我来说是可行的。
BenR

3
-s选项之后放置width和height参数对我来说不起作用。仍将其裁剪为正方形。很沮丧!
Erik van der Neut

106

我发现对我来说,最好的工具是rsvg-convert

可以在brew with中找到它brew install librsvg,其用法如下:

rsvg-convert -h 32 icon.svg > icon-32.png

(此示例创建了32px高png。宽度是自动确定的。



实际上,这是可行的,而ImageMagick则convert发布了错误并且无法掩盖复杂的SVG
Brice 2015年

7
这是迄今为止为OS X Yosemite +1找到的最好的解决方案!
格雷格·马丁

奇怪的是,这对于我的某些SVG失败了。在qlmanage回答工作了所有的人,但把一个白色的背景,这是我不想要的。
sudo

1
使用时rsvg-convert,生成的.png具有正确的尺寸,但是图像显示为全黑而不是原始颜色。随着qlmanage图像被裁剪成正方形。仍在寻找解决方案:-(
Erik van der Neut

43

ImageMagick是一种功能非常强大的命令行图像编辑器,如果它具有GUI,它可能会与Photoshop媲美。但是谁仍然需要那些。:P

安装后,类似下面的内容会将.svg转换为.png:

$ convert picture.svg picture.png

原始.svg不会被删除。


有一个GUI display
伊格纳西奥·巴斯克斯

1
当我使用Fink安装ImageMagick时,无法将svg转换为png-出现了一些错误。原来,我还需要安装librsvg2-bin。
tst

如果未安装librsvg2-bin(例如在OS X上),它将失败。无法找到将其安装在OS X
John Sheehan

3
如果您要调整SVG的大小,因为它会生成模糊的图像,那么这将无法正常工作。
Behrang

3
它也不能正确转换所有SVG文件。至少qlmanage获得了图像的所有部分。
2014年

28

Inkscape的Command-Interface可以为我带来最佳效果:

/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg

好消息是,您可以指定所生成图像的确切像素大小,而不必担心密度。


这对我有用!-我使用Inkscape创建了更大的SVG
matheszabi,2013年

这是正确呈现我的手写的SVG的唯一方法
格里芬

转换无法从SVG生成良好的PNG文件。到目前为止,使用Inkscape是最好的方法。
ol_v_er 2015年

这对我有用,但创建的文件非常模糊。
Marcin

3
我在查找文件时遇到问题,因此无法运行inkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png
Andrei 2015年

16

好的,如果您使用的是Google Chrome浏览器,我在Mac上找到了一种简单的方法。

一句话,就是要查看svg网页中的图像(必须在html文件中),右键单击图像并选择“复制图像”,然后粘贴到“预览”应用程序中。

脚步:

  1. 下载svg文件或将文件保存在硬盘中,例如,somefile.svg
  2. 现在,在同一文件夹中,仅制作一个tmp.html包含以下行的html文件:<img src="somefile.svg">
  3. 现在,在Google Chrome中打开该html文件
  4. 您应该看到图像。现在,右键单击图像并选择“复制图像”
  5. 转到Mac的预览应用,然后选择 "File -> New from Clipboard"
  6. 现在File -> Save文件已存在png。(或其他文件类型)。

这已在Mac OS X El Capitan的当前Chrome(版本48.0)上进行了测试。

更新:我不确定这是否是由于Google Chrome施加的某些限制。我只是使用Chrome 58.0尝试了SVG文件,但从上述方法中得到的图像很小。如果您也看到这种情况,也可以使用

<img src="somefile.svg" style="height: 82vh; margin-top: 9vh; margin-left: 9vh">

然后您将在屏幕上获得足够好的图像来进行屏幕截图(例如使用Mac CmdShift4CmdShift3在Mac上)。确保将Chrome窗口的大小调整为屏幕上允许的最大大小。


智能解决方案!
2016年

1
实际上,这对我来说是最好的结果,因为它的呈现方式与浏览器完全相同。
杰森·哈斯拉姆

生成的图像对我来说是非常差的分辨率
迈克尔

巧妙:)但对于非常大的SVG,如@Michael所述,所得图像的分辨率太低。
waldyrious

5

如果您想一次执行许多操作,则可以:

mogrify -format png *.svg

还有一些选项可以即时调整大小。


3
mogrify也是ImageMagick的标准杆。
ShreevatsaR 2011年

效果不错,但速度很慢。
Meekohi 2014年

-1?有人认为这没有帮助?怎么了
DefenestrationDay 2014年

2
我不是投票否决的人,但值得注意的是ImageMagick在调整大小之前将svg愚蠢地转换为任意大小的光栅图像,从而导致输出模糊。
Dae 2015年

4

试试Apache Batik

java -jar batik-rasterizer.jar FILES

它还支持批量转换,并具有许多其他有用的选项。



3

您也可以使用phantomjs渲染svg。优点是,由于它基本上是无头WebKit,因此可以像浏览器一样呈现它。

下载完成后,您需要example文件夹中的phantomjs(二进制)和rasterizer.js文件。

phantomjs examples/rasterize.js Tiger.svg out.png

1
作为参考,可以将其安装brew cask install phantomjs。在我的安装中,examples文件夹位于path中/usr/local/Caskroom/phantomjs/2.1.1/phantomjs-2.1.1-macosx/examples/
waldyrious

2

这是我使用的:

brew install imagemagick --with-librsvg

然后运行以下命令:

find . -type f -name "*.svg" -exec bash -c 'convert $0 $0.png' {} \; rename 's/svg\.png/png/' *

希望能帮助到你。


1

我在Linux上使用此命令。它也应该为您工作。

mogrify +antialias -density 2000 -verbose -format png *.svg

我了解到,如果没有“ -density”参数,则位图将非常像素化。更改-density值以满足您的需求。


2
即使具有密度,转换也不会生成像矢量图像一样清晰的图像。尝试使用Apache Batik。
Behrang

1

ImageMagick的convert命令(使用其他一些参数)对我来说是什么。这是我的批处理Bash脚本解决方案,可将任务划分为多个进程,以利用您的所有内核!根据需要进行修改。

batchConvertToSVG.sh(将进程数作为参数):

end=$(( $1 - 1 ))
for i in `seq 0 $end`;
        do
            echo Spawning helper $i of $end
                ./convertToSvgHelper.sh $i $1 &
        done 

convertToSvgHelper.sh:

n=$1
for file in ./*.svg; do
   filename=${file%.svg}
   echo converting file named $filename
   test $n -eq 0 && convert -format png -resize 74 -background transparent -density 600 $file $filename.png
   n=$((n+1))
   n=$((n%$2))
done

0

如前所述,ImageMagick可以解决问题。我只想为GraphicsMagick添加一点,这是ImageMagick的旧分支,具有一些改进(通过fink安装时,依赖膨胀大大减少了)。


0

您可以将SVG文件的整个文件夹批量转换为PNG。我使用Inkscape命令行界面生成宽度为80px的png文件。

find ~/desktop/toconvert '*.svg' -exec /Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -w 80 -e "{}".png "{}" \;

png将以原始名称* .png保存


0

无需安装任何内容的另一种方法。虽然不在命令行中。

  1. 在Safari中打开.svg文件。
  2. 按alt-command-i打开检查器。
  3. 右键单击<svg>标签,选择“捕获屏幕截图”。(请注意,您不得放大图像。)

PS要放大.svg图像(如果它太小),请尝试在文本编辑器中打开.svg文件,然后将其附加0到每个数字(元属性中除外)。这可以通过从(\d+)到的全局正则表达式替换来完成,例如$10,其中$1是用于反向引用的占位符。


您可能应该提到,这与太极者无极而生的答案几乎相同  。
斯科特

-1

wkhtmltoimage(来自项目wkhtmltopdf)转换得很好:

wkhtmltoimage --zoom 2 foo.svg foo.png

ImageMagick 在我的Mac上将CJK字符呈现为空白。


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。- 评分
布莱克伍德

@Blackwood很好,已更新。
georgexsh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.