2

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

#!/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; 

它转换它们,但结果看起来很可怕。由于ImageMagick似乎像处理任何其他图像一样对待SVG,所以SVG的清晰线条因抗锯齿而变得模糊。再加上大小都是错误的,因为几乎没有任何结果文件是方形的。

我需要一些方式来SVGs转换与几乎以下条件:

  • 无抗锯齿
  • 创建与SVG在中心
  • 允许重新绘制一个正方形图片-colour全黑SVG图像(可选)
  • 使用Linux命令行(Arch Linux的)

对于完整的故事:我试图从Polymer中获得Material Design的图标以便在应用程序中使用。

回答

3

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

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

它的工作完美,除了命令应该是'convert',而不是'im'。非常感谢! – Lanbo 2014-10-02 10:45:28

+0

对不起,我使用了一个缩短的符号链接。 – rostok 2014-10-02 11:11:58

+0

你可以发布一个github存储库和android生成的图标吗? @LambdaDusk – ClarkXP 2014-11-24 14:33:30