自动将SVG转换为可用于Android的PNG格式

3

我有大约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;

它们被转换了,但结果看起来很糟糕。由于ImageMagick似乎将SVG视为任何其他图像,因此SVG的清晰线条被反锯齿变得模糊。而且大小都不正确,几乎没有一个生成的文件是正方形的。
我需要一种以几乎这些条件转换SVG的方法:
  • 无反锯齿
  • 创建一个包含SVG绘图中心的正方形图像
  • 允许重新着色完全黑色的SVG图像(可选)
  • 使用Linux命令行(Arch Linux)
完整故事:我正在尝试获取来自Polymer的Material Design图标,以便在应用程序中使用。
1个回答

4

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

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

它的工作非常完美,只是命令应该是“convert”,而不是“im”。非常感谢! - Lanbo
抱歉 - 我使用了一个缩短的符号链接。 - rostok
你能否发布一个带有生成的 Android 图标的 Github 代码库?@LambdaDusk - ClarkXP
@ClarkXP 我知道回答晚了,但是这个链接应该正是你在寻找的东西。 - Lanbo
@LambdaDusk 最终我找到了 materialdesignicons.com,它拥有所有的图标和更多。 - ClarkXP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接