是否有任何命令行程序可以将SVG转换为可在macOS上运行的PNG?

评论

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

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

#1 楼

或不安装任何东西:

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


它将产生picture.svg.png宽1000像素。 OS X 10.6.3。

评论


不幸的是,这将图像裁剪为正方形。

–马丁·彼得斯(Martijn Pieters)
2011年1月30日15:13

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

–ShreevatsaR
2011年6月6日8:07



这将在第一象限中生成带有svg文件的图像。不自动裁剪。尝试从名词项目转换文件-希望这能奏效。

– Alex Cook
2012年11月12日20:40

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

– BenR
16年5月19日在8:30

将宽度和高度参数都放在-s选项之后对我不起作用。仍将其裁剪为正方形。很沮丧!

– Erik van der Neut
17年8月25日在7:45

#2 楼

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

可以在带有brew install librsvg的brew中找到它,其用法如下:是自动确定的。

评论


这是唯一在Mavericks和commons.wikimedia.org/wiki/上为我工作的人。

–阿伦·艾玛迪亚(Aron Ahmadia)
2014年6月10日的1:03

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

– Brice
15年4月27日在10:03

这是迄今为止为OS X Yosemite +1找到的最好的解决方案!

–格雷格·马丁(Greg Martin)
2015年5月9日15:03

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

– Erik van der Neut
17年8月25日在7:47

@Ahti你是对的!我没有在您的答案中注明正确的包装名称。如果正确遵循说明,则您的说明会完美地发挥作用,而rsvg-convert就像一个符咒。麻烦您了

–汤姆
20 Apr 23'2:09

#3 楼

ImageMagick是一种功能非常强大的命令行图像编辑器,如果它具有GUI,它可能会与Photoshop媲美。但是谁仍然需要那些。 :P
安装后,类似以下内容会将.svg转换为.png:
$ convert picture.svg picture.png

未删除原始.svg。

评论


在显示中有点像GUI。

–伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)
10-4-26'4:04

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

–tst
2010年5月21日在12:44

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

– John Sheehan
2012年8月3日在18:53

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

–βξhrαng
13年5月23日在3:04

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

–约翰
2014年2月21日19:50在

#4 楼

使用Inkscape的Commandline-Interface可以为我产生最佳结果:
安装Inkscape:
brew cask install inkscape

将test.svg转换为宽度为1024(保持宽高比)的output.png:
/Applications/Inkscape.app/Contents/MacOS/inkscape --export-type png --export-filename output.png -w 1024 test.svg

旧答案(在最新的inkscape中不再起作用):
/Applications/Inkscape.app/Contents/Resources/bin/inkscape --export-png output.png -w 1024 -h 768 input.svg*


评论


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

–matheszabi
13-10-7在21:56



这是正确呈现我的手写svg的唯一方法

–格里芬
2014年7月31日23:45

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

– ol_v_er
2015年2月27日在7:43

我在查找文件时遇到问题,因此以inkscape $(pwd)/logo.svg --export-png $(pwd)/logo.png的形式运行

– Andrei
2015年6月7日在8:32

inkscape --export-type =“ png” $(ls -q)就像Magic一样,可以将我目录中的所有SVG文件导出到PNG文件中,质量很好!

– Chathura Kulasinghe
20-05-14在10:04



#5 楼

好的,我找到了一种在Mac上使用Google Chrome的简单方法。 ,则是要在网页中查看webp图像(必须在png文件中),右键单击该图像并选择“复制图像”,然后粘贴到“预览”应用中。 >下载或将jpg文件放入您的硬盘驱动器,例如svg

现在,在同一文件夹中,只需制作一个包含以下内容的HTML文件html:现在,在Google Chrome浏览器中打开该html文件。
您应该看到该图像。现在,只需右键单击图像,然后选择“复制图像”
转到Mac的预览应用程序,然后选择svg文件,现在有了somefile.svg文件,您就拥有了tmp.html文件。 (或其他文件类型)。

此版本已在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">

,或者,如果您想获得更多利润,请使用:
<img src="somefile.svg" style="height: 64vh; margin-top: 18vh; margin-left: 18vh">

,您会在屏幕上得到足够的图像进行屏幕截图-例如在Mac上使用CmdShift4或CmdShift3。确保首先将Chrome窗口的大小调整为屏幕上允许的最大大小。

评论


智能解决方案!

– Manu
16 Mar 2 '16 at 15:07

实际上,这对我来说是最好的结果,因为它的呈现方式与浏览器完全相同。

–詹森·哈斯兰(Jason Haslam)
17年1月26日在1:25

生成的图像对我来说分辨率很差

–迈克尔
17-09-22在16:02

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

–waldyrious
18-10-23在10:24

#6 楼

我已经使用node / npm进行了svgexport的开发,它是跨平台的,可以很简单地实现:


评论


到目前为止,这是最容易使用和记住的一种。另外,在我看来,唯一能产生正确结果的人。

– MarkoGrešak
17年5月9日在22:09

最终的分辨率对我来说不是很好。

–迈克尔
17年9月22日在16:22

#7 楼

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

mogrify -format png *.svg

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

评论


mogrify也是ImageMagick的标准配置。

–ShreevatsaR
2011年6月6日上午8:19

效果很好,但速度很慢。

– Meekohi
2014年1月24日21:58

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

–防御日
2014年7月29日在20:41

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

–大田
2015年11月1日19:47

首先安装inkscape(并将其放在路径上)可以改善转换结果。

–霍莉·康明斯
19年11月26日在17:28

#8 楼

试试Apache Batik。

java -jar batik-rasterizer.jar FILES


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

#9 楼

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

下载后,需要从examples文件夹中获取phantomjs(二进制)和rasterizer.js文件。 >
phantomjs examples/rasterize.js Tiger.svg out.png


评论


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

–waldyrious
18-10-23在10:26



#10 楼

这就是我使用的方法:

brew install imagemagick --with-librsvg

然后运行以下命令:

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

希望它会有所帮助。

评论


补充说明该命令的功能将非常有用。

– P A N
20 Jan 27 '20 at 19:42

#11 楼

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


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

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

评论


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

–斯科特
19年5月11日19:27

#12 楼

我在Linux上使用此命令。

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


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

评论


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

–βξhrαng
13年5月23日在3:06

#13 楼

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

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

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


convertToSvgHelper.sh:

n=
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%))
done


#14 楼

您可能要签出svgexport:

svgexport input.svg output.png 64x
svgexport input.svg output.png 1024:1024


svgexport是我制作的用于将svg导出到png / jpeg的简单命令行工具和npm软件包。要安装svgexport,请安装npm,然后运行:

npm install -g svgexport


#15 楼

我基于@seb的答案创建了一个函数
function svg2png() {
    svgFile=;
    width=;

    if [[ -z `file ${svgFile} | grep 'Scalable Vector Graphics image'` ]]; then
        echo "file ${svgFile} type is not SVG";
        return 1;
    fi

    echo "file ${svgFile} type is SVG";

    if [[ -z ${width} ]]; then
        echo "width not specified, using width=1024 as default";
        width=1024;
    fi

    pngFile="$(echo ${svgFile} | sed "s/\.[s,S][v,V][g,G]/\.png/")";

    inkscape --export-type png --export-filename ${pngFile} -w ${width} ${svgFile};
}

将其添加到您的.bashrc.zshrc中并执行
source .bashrc
# or
source .zshrc

用法:
svg2png ./Documents/times_clocks .svg 2048

#16 楼

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

#17 楼

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

#18 楼

wkhtmltoimage(来自项目wkhtmltopdf)可以很好地进行此转换:

评论


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

– Blackwood
18/12/14在4:09

@Blackwood很好,已更新。

–georgexsh
18/12/14在8:11

#19 楼

我已经开始组装工具以提供用于常见操作的简化界面。
您可以将SVG转换为PNG,如下所示: 。
如果没有其他内容,请查看源代码,了解如何编写自己的脚本以使用JavaScript进行操作。