使用ImageMagick将SVG转换为带抗锯齿的透明PNG

And*_*ohr 61 svg png imagemagick inkscape

我想将SVG图像转换为具有透明背景和抗锯齿边缘的PNG文件(使用半透明像素).不幸的是,我不能让ImageMagick做抗锯齿,边缘总是看起来很糟糕.这是我试过的:

convert +antialias -background transparent  in.svg -resize 25x25 out.png
Run Code Online (Sandbox Code Playgroud)

我可以使用任何想法或不同的命令行工具?

Mic*_*cah 88

作为旁注,我发现获得透明度有点棘手.而不是使用的透明,我不得不使用.

convert -background none in.svg out.png
Run Code Online (Sandbox Code Playgroud)

  • @petrsyn虽然命令将接受输入图像路径作为第一个参数(例如`convert in.svg -background none out.png`,但我发现这种排序将无法使背景透明;它导致了不透明的白色背景!确保命令中的`in.svg`和`out.png`是*最后两个参数*. (26认同)
  • 'none'和'transparent'都为我创造了不透明的白色背景.不透明.我在Mac上使用6.8.8-3 (4认同)
  • `-background none`为我工作,ImageMagick 6.8.6-6在Mac上 (4认同)

hal*_*fer 55

Inkscape会这样做:

inkscape \
    --export-png=out.png --export-dpi=200 \
    --export-background-opacity=0 --without-gui in.svg
Run Code Online (Sandbox Code Playgroud)

  • Imagemagick现在将使用Inkscape,如果它安装在系统上.您可以选择:Inkscape(如果在系统上),RSVG委托(必须与Imagemagick一起安装,或者Imagemagick内部MSVG/XML. (2认同)

sle*_*per 16

实际上,阅读imagemagick文档:

-antialias

绘制字体和线条时启用/禁用抗锯齿像素的渲染.默认情况下,对象(例如文本,线条,多边形等)在绘制时是抗锯齿的.使用+ antialias禁用添加抗锯齿边缘像素.然后,这会将
添加到图像的颜色数量减少到直接绘制的颜色.也就是说,在绘制这些对象时不会添加混合>颜色.

+抗锯齿的确将禁用抗锯齿.


chi*_*NUT 10

我学会如何做到这一点的方法来自这里找到的方法:如何将.eps文件转换为高质量的1024x1024 .jpg?

这与@ halfer的解决方案是一样的inkscape- 用 - 首先提升DPI - 但是你可以在imagemagick使用该-density选项时完成同样的事情.

convert -density 200 in.svg -resize 25x25 -transparent white out.png
Run Code Online (Sandbox Code Playgroud)


Yur*_*hko 5

添加该-transparent white选项可以解决问题,特别是在我的情况下,因为背景没有完全删除(不幸的是存在光影)。所以我使用恕我直言更清晰的解决方案,完全删除与 ImageMagic 的背景

convert -channel rgba -background "rgba(0,0,0,0)" in.svg out.png

它通过 RGBA 通道将完全透明的黑色设置为背景。

  • 经过一段时间的摆弄后,这是让它发挥作用的**唯一**方法 - 非常感谢! (2认同)

you*_*uly 5

对我来说适用于 svg 到 png:

convert ${src} \
    -transparent white \
    -background none \
    -resize 345x345 \
    res/drawable-xxxhdpi/${dest}
Run Code Online (Sandbox Code Playgroud)