Конвертировать SVG-файл в несколько PNG-файлов разного размера - PullRequest
25 голосов
/ 16 сентября 2011

У меня есть изображение логотипа в формате SVG, и мне интересно, есть ли способ создать несколько файлов PNG разного размера.

Например, я установил 20 различных ширины и высоты, и он генерирует 20 файлов PNG.Ничего страшного, если мне придется делать 5 изображений одновременно.

У меня установлен иллюстратор, и я не могу понять, как это сделать.

Спасибо за всю вашу помощь!

Ответы [ 5 ]

36 голосов
/ 15 апреля 2013

Принятый ответ в порядке.Доступна официальная справка по опциям .Здесь хорошо подойдут и основные команды оболочки:

for x in 10 100 200 ; do inkscape --export-png logo${x}.png -w ${x} logo.svg ; done

В командной строке в windows используйте эту строку из @avalancha в комментариях

for %x in (100 200 300) ; do inkscape --export-png logo%x.png -w %x logo.svg ; done
14 голосов
/ 11 марта 2014

Вот как сделать это намного быстрее (для меня 3 раза всего за 5 экспортов на SSD), запустив Inkscape только один раз, и как экспортировать изображения в разные каталоги (как использует Android):

#!/bin/sh
# Converts the Inkscape icon file ic_launcher_web.svg to the launcher web & app png files.

PROJECT="My Project Name"
INPUT="source-assets/ic_launcher_web.svg"
MAIN="${PROJECT}/src/main/"
RES="${MAIN}res/"
DRAWABLE="${RES}/drawable"

inkscape --shell <<COMMANDS
  --export-png "${MAIN}ic_launcher-web.png"         -w 512 "${INPUT}"
  --export-png "${DRAWABLE}-mdpi/ic_launcher.png"   -w  48 "${INPUT}"
  --export-png "${DRAWABLE}-hdpi/ic_launcher.png"   -w  72 "${INPUT}"
  --export-png "${DRAWABLE}-xhdpi/ic_launcher.png"  -w  96 "${INPUT}"
  --export-png "${DRAWABLE}-xxhdpi/ic_launcher.png" -w 144 "${INPUT}"
quit
COMMANDS

Это скрипт оболочки bash.В Windows вы можете запустить его в MINGW32 (например, Git Shell GitHub) или преобразовать в сценарий оболочки Windows DOS.(Для сценария DOS вам придется изменить «здесь документ» КОМАНДЫ на то, что может обработать DOS. См. heredoc для пакета Windows? , чтобы узнать о таких методах, как вывод нескольких строк текста во временный файл.)

14 голосов
/ 17 сентября 2011

Я не знаю про Illustrator, но это должно быть легко с использованием параметров командной строки Inkscape . Например, используя Ruby:

$ ruby -e '[10,100,200].each { |x| `inkscape --export-png logo#{x}.png -w #{x} logo.svg` }'
2 голосов
/ 20 января 2017

Если вы этого еще не сделали, установите imagemagick.В OSX для этого требуется поддержка rsvg, а именно:

brew install imagemagick --with-librsvg

Вам также понадобится inkscape, в противном случае вы можете обнаружить, что ваши изображения выглядят черными (за исключением прозрачных областей).1008 * Тогда вы сможете преобразовать следующим образом:

convert -density 1536 -background none -resize 100x100 input.svg output-100.png

1536 - это обходной путь для чего-то, на что я не могу найти хороших ответов.В моих экспериментах пропуск аргумента -density создает изображения очень маленького размера.Преобразование изображения в -size 100x100 в -density 1024 дает мне выходное изображение 96x96, поэтому вместо этого я перерегулирую плотность и уменьшу размер до целевого размера.

TL; DR использует плотность, которая в 1500 раз больше целевого размера, и идет оттуда.

Существует много способов массового запуска этой команды.Вот один в оболочке:

for s in 10 100 200 ; do convert -density 1536 -background none -resize ${s}x${s} input.svg output-${s}.png ; done
2 голосов
/ 17 января 2012

Взгляните на inkmake . Я на самом деле сделал этот инструмент только для пакетного экспорта файлов SVG в PNG и т. Д. В разных размерах. Это было дизайн, потому что я хотел сохранить в Inkscape, а затем просто запустить inkmake в терминале, и он будет экспортировать все зависящие от PNG файлы.

...