Преобразование SVG файла в несколько PNG файлов различного размера

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

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

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

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

Ответ 1

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

$ ruby -e '[10,100,200].each { |x| `inkscape --export-png logo#{x}.png -w #{x} logo.svg` }'

Ответ 2

Принятый ответ в порядке. Существует официальная официальная помощь по параметрам. Здесь также будут полезны основные команды Shell:

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

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

for %x in (100 200 300) ; do inkscape --export-png logo%x.png -w %x logo.svg ; done

Ответ 3

Здесь, как сделать это намного быстрее (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 script. В Windows вы можете запустить его в MINGW32 (например, GitHub Git Shell) или преобразовать его в оболочку Windows DOS script. (Для DOS script вам придется изменить "КОМПАКТНЫЕ ДАННЫЕ" здесь, что может обрабатывать DOS. См. heredoc для Windows batch? для таких методов, как повторяя несколько строк текста в временном файле.)

Ответ 4

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

Ответ 5

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

brew install imagemagick --with-librsvg

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

brew install homebrew/gui/inkscape

Затем вы сможете конвертировать следующим образом:

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