Автоматическое преобразование SVG в формат PNG для Android

У меня есть около 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)

Для полной истории: я пытаюсь получить значки для Material Design от Polymer, чтобы их можно было использовать в приложении.


person Lanbo    schedule 27.09.2014    source источник


Ответы (1)


Как и в любом векторном формате, вы должны предоставить опцию -density с соответствующей настройкой DPI. Установка его выше 72 приведет к гораздо лучшему разрешению. Попробуй это

convert -density 300 -background none input.svg -resize 128x128 -gravity center -extent 128x128  output.png
person rostok    schedule 30.09.2014
comment
Он работает отлично, за исключением того, что команда должна быть convert, а не im. Большое спасибо! - person Lanbo; 02.10.2014
comment
Извините за это - я использую сокращенную символическую ссылку. - person rostok; 02.10.2014
comment
Вы можете опубликовать репозиторий github со сгенерированными иконками для Android? @LambdaDusk - person ClarkXP; 24.11.2014
comment
@ClarkXP Я знаю, что поздно отвечать, но это должно быть именно то, что вы ищете за. - person Lanbo; 23.12.2014
comment
@LambdaDusk Наконец-то я нашел materialdesignicons.com, на котором есть все значки и многое другое. - person ClarkXP; 24.12.2014