自动将SVG转换为Android可用PNG

时间:2014-09-27 08:34:39

标签: svg command-line imagemagick imagemagick-convert material-design

我有大约434 .svg图标我想准备在Android应用中使用它们。因为使用Inkspace手动导出它们可能是疯狂的,所以我试图找到一种使用ImageMagick和类似方法导出它们的方法。我试图想出一个脚本:

#!/bin/sh

echo "Deleting directories"
rm -rf ../mdpi ../hdpi ../xhdpi ../xxhdpi ../xxxhdpi

echo "Creating directories"
for d in ./*; do
    mkdir -p ../mdpi/$d ../hdpi/$d ../xhdpi/$d ../xxhdpi/$d ../xxxhdpi/$d
done;

for f in ./*/*.svg; do
    filename=`dirname $f`/`basename $f .svg`.png
    echo "Converting $f to $filename"
    convert -background transparent $f -resize 24x24 ../mdpi/$filename # 2>/dev/null
    convert -background transparent $f -resize 36x36 ../hdpi/$filename # 2>/dev/null
    convert -background transparent $f -resize 48x48 ../xhdpi/$filename # 2>/dev/null
    convert -background transparent $f -resize 72x72 ../xxhdpi/$filename # 2>/dev/null
    convert -background transparent $f -resize 96x96 ../xxxhdpi/$filename # 2>/dev/null
    echo 'Done'
done;

它转换它们,但结果看起来很糟糕。 SVG的清晰线条因抗锯齿而变得模糊,因为ImageMagick似乎像任何其他图像一样对待SVG。此外,尺寸都是错误的,因为几乎所有文件都不是正方形。

我需要一些方法来转换SVG,几乎就是这些条件:

  • 无抗锯齿
  • 使用中心的SVG绘图创建方形图像
  • 允许重新着色全黑SVG图像(可选)
  • 使用Linux命令行(Arch Linux)

完整的故事:我试图让Polymer的Material Design图标在App中使用。

1 个答案:

答案 0 :(得分:4)

作为每种矢量格式,您应该为-density选项提供适当的DPI设置。将其设置为高于72将导致更好的分辨率。试试这个

convert -density 300 -background none input.svg -resize 128x128 -gravity center -extent 128x128  output.png