kay*_*ahr 358 svg png imagemagick
我有一个SVG文件,其定义大小为16x16.当我使用Image Magick的转换程序将其转换为PNG时,我得到一个16x16像素的PNG,这太小了:
convert test.svg test.png
Run Code Online (Sandbox Code Playgroud)
我需要指定输出PNG的像素大小.-size
参数似乎被忽略,-scale
参数在转换为PNG 后缩放PNG.到目前为止,我通过使用-density
参数得到了最好的结果:
convert -density 1200 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
但是我不满意,因为我想要以像素为单位指定输出大小而不用数学来计算密度值.所以我想做这样的事情:
convert -setTheOutputSizeOfThePng 1024x1024 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
那么我在这里使用的神奇参数是什么?
808*_*und 454
在这个例子中,我无法从ImageMagick中获得好的结果,但是Inkscape在Linux和Windows上做得很好:
inkscape -z -e test.png -w 1024 -h 1024 test.svg
Run Code Online (Sandbox Code Playgroud)
以下是使用此命令将16x16 SVG缩放为200x200 PNG的结果:
仅供参考,我的Inkscape版本(在Ubuntu 12.04上)是:
Inkscape 0.48.3.1 r9886 (Mar 29 2012)
Run Code Online (Sandbox Code Playgroud)
在Windows 7上,它是:
Inkscape 0.48.4 r9939 (Dec 17 2012)
Run Code Online (Sandbox Code Playgroud)
Ali*_*iba 128
试试svgexport:
svgexport input.svg output.png 64x
svgexport input.svg output.png 1024:1024
Run Code Online (Sandbox Code Playgroud)
svgexport是一个简单的跨平台命令行工具,我将svg文件导出到jpg和png,请参阅此处了解更多选项.要安装svgexport install npm,请运行:
npm install svgexport -g
Run Code Online (Sandbox Code Playgroud)
编辑:如果您发现库有问题,请在GitHub上提交,谢谢!
Har*_*dev 104
这不是完美的,但它可以完成这项工作.
convert -density 1200 -resize 200x200 source.svg target.png
Run Code Online (Sandbox Code Playgroud)
基本上它可以将DPI提高到足够高的水平(只需使用经过教育/安全的猜测),即调整大小的质量足够高.我试图找到一个合适的解决方案,但经过一段时间后,我认为这对我目前的需求已经足够了.
注意:使用200x200!强制给定的分辨率
Jos*_*ban 54
如果您使用的是MacOS X并且在使用Imagemagick转换时遇到问题,可以尝试使用RSVG lib重新安装它.使用HomeBrew:
brew remove imagemagick
brew install imagemagick --with-librsvg
Run Code Online (Sandbox Code Playgroud)
验证它是否正确委派:
$ convert -version
Version: ImageMagick 6.8.9-8 Q16 x86_64 2014-12-17 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2014 ImageMagick Studio LLC
Features: DPC Modules
Delegates: bzlib cairo fontconfig freetype jng jpeg lcms ltdl lzma png rsvg tiff xml zlib
Run Code Online (Sandbox Code Playgroud)
它应该显示rsvg
.
小智 36
当svg单位不是px
(例如cm)时,Inkscape似乎不起作用.我得到一张空白图片.也许,它可以通过调整dpi来修复,但它太麻烦了.
Svgexport是一个node.js程序,因此通常没用.
Imagemagick的转换工作正常:
~$ convert -background none -size 1024x1024 infile.svg outfile.png
Run Code Online (Sandbox Code Playgroud)
如果使用-resize
,图像模糊,文件更大.
最好
~$ rsvg -w 1024 -h 1024 infile.svg outfile.png
Run Code Online (Sandbox Code Playgroud)
它是最快的,具有最少的依赖性,并且输出比转换小约30%.安装librsvg2-bin来获取它.似乎没有手册页但您可以输入:
~$ rsvg --help
Run Code Online (Sandbox Code Playgroud)
得到一些帮助.简单就是好.
Ian*_*Ian 18
在按照Jose Alban的回答中的步骤之后,我能够使用以下命令使ImageMagick正常工作:
convert -density 1536 -background none -resize 100x100 input.svg output-100.png
Run Code Online (Sandbox Code Playgroud)
数字1536来自球场密度估计,有关详细信息,请参阅此答案.
小智 15
为了重新缩放图像,-density
应使用该选项.据我所知,标准密度为72,尺寸为1:1.如果您希望输出png是原始svg的两倍,请将密度设置为72*2 = 144:
convert -density 144 source.svg target.png
Run Code Online (Sandbox Code Playgroud)
fmw*_*w42 11
在 ImageMagick 中,如果将 Inkscape 或 RSVG 与 ImageMagick 一起使用,则可以获得比其自己的内部 MSVG/XML 渲染更好的 SVG 渲染。RSVG 是一个需要与 ImageMagick 一起安装的委托。如果系统上安装了 Inkscape,ImageMagick 将自动使用它。我在下面的 ImageMagick 中使用 Inkscape。
没有“魔法”参数可以满足您的需求。
但是,可以非常简单地计算渲染输出所需的确切密度。
这是一个以默认密度 96 渲染时的 50x50 小按钮:
convert button.svg button1.png
Run Code Online (Sandbox Code Playgroud)
假设我们希望输出为 500。输入为 50,默认密度为 96(旧版本的 Inkscape 可能使用 92)。因此,您可以根据尺寸和密度的比率来计算所需的密度。
512/50 = X/96
X = 96*512/50 = 983
Run Code Online (Sandbox Code Playgroud)
convert -density 983 button.svg button2.png
Run Code Online (Sandbox Code Playgroud)
在 ImageMagick 7 中,您可以按如下方式进行内联计算:
magick -density "%[fx:96*512/50]" button.svg button3.png
or
in_size=50
in_density=96
out_size=512
magick -density "%[fx:$in_density*$out_size/$in_size]" button.svg button3.png
Run Code Online (Sandbox Code Playgroud)
在使用 brew 的 macOS 上,直接使用 librsvg 效果很好
brew install librsvg
rsvg-convert test.svg -o test.png
Run Code Online (Sandbox Code Playgroud)
许多选项可通过 rsvg-convert --help
小智 7
你为什么不试试inkscape命令行,这是我的bat文件将这个目录中的所有svg转换为png:
FOR %% x IN(*.svg)DO C:\ Ink\App\Inkscape\inkscape.exe %% x -z --export-dpi = 500 --export-area-drawing --export-png ="% %〜nx.png"
对于简单的 SVG 到 PNG 转换,我发现 cairosvg ( https://cairosvg.org/ ) 的性能比 ImageMagick 好。在目录中的所有 SVG 文件上安装和运行的步骤。
pip3 install cairosvg
Run Code Online (Sandbox Code Playgroud)
在包含 .svg 文件的目录中打开一个 python shell 并运行:
import os
import cairosvg
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)
透明背景,使用 ImageMagick 7 以目标高度/大小导出:
magick -background none -size x1080 in.svg out.png
Run Code Online (Sandbox Code Playgroud)
单线质量转换器:
for i in *svg; do magick -background none -size x1080 "$i" "${i%svg}png"; done
Run Code Online (Sandbox Code Playgroud)
我来到这篇文章 - 但我只是想批量快速地进行转换,而不使用任何参数(由于多个文件大小不同)。
rsvg drawing.svg drawing.png
Run Code Online (Sandbox Code Playgroud)
对我来说,要求可能比原作者要容易一些。(想在 MS PowerPoint 中使用 SVG,但不允许)
小智 5
如果没有 librsvg,您可能会得到黑色 png/jpeg 图像。我们必须使用 imagemagick安装librsvg
到svg 文件。convert
sudo apt-get install imagemagick librsvg
convert -density 1200 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
brew install imagemagick librsvg
convert -density 1200 test.svg test.png
Run Code Online (Sandbox Code Playgroud)
find . -type f -name "*.svg" -exec bash -c 'rsvg-convert -h 1000 $0 > $0.png' {} \;
rename 's/svg\.png/png/' *
Run Code Online (Sandbox Code Playgroud)
这将循环当前文件夹和子文件夹中的所有文件并查找.svg
文件并将其转换为具有透明背景的 png。
确保您已安装 librsvg 并重命名 util
brew install librsvg
brew install rename
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
179956 次 |
最近记录: |