Пакетная конвертация с ресайзом SVG to SVG и SVG to PNG

Автор CoolAller, 02 апреля 2016, 17:43:46

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

CoolAller

Всем привет!

Нужно сделать пакетную конвертацию изображений (иконок) из SVG в PNG без потери качества с изменением размеров. Очень давно как-то делал командой из терминала, но можно и через какую-нибудь тулзу, если такая есть. Беглое гугление результата не дало.


CoolAller

#2
Yrii, сейчас пробую с помощью inkscape:

for i in *; do inkscape $i --export-png=`echo $i | sed -e 's/svg$/png/'` -w 48 -h 48; done

Опции: -w и -h делают ресайз. Не нашел как задать Best Quality.

Командой convert не получается сделать пакетное преобразвание и она делает белый фон у png.

Yrii


CoolAller


Yrii

хм, ну в man convert у меня эта опция описано, но возможно я не правильно понял/перевел её значение, и она вам может и не поможет :-)
Цитировать-transparent color   make this color transparent within the image

CoolAller

#6
Yrii, да я ее тоже видел, но даже если бы она и работала я не знаю как там сделать пакетную конвертацию.

Cообщение объединено 02 апреля 2016, 21:09:26

Нашел еще такой способ:
Устанавливаем librsvg2(-bin) , для debian/ubuntu: # apt-get install librsvg2-bin
Заходим в каталог с svg файлами из терминала.
Конвертируем .svg в .png:
for i in ./*.svg ; do rsvg-convert $i -o `echo $i | sed -e 's/svg$/png/'`; done

Качество конветации низкое.

Пробовал делать так:
Сначала конвертировал SVG в PNG при помощи Inkscape:
sudo aptitude install inkscape
В терминале переходим в папку с файлами, которые хотим конвертировать:
for i in *; do inkscape $i --export-png=`echo $i | sed -e 's/svg$/png/'` -d 2400; done
Где аргумент -d, --export-dpi=DPI (разрешение изображения)
Потом сделал ресайз с помощью ImageMagick:
sudo aptitude install imagemagick
В терминале переходим в папку с файлами, у которых нужно изменить размер:
for f in *.png ; do convert -resize 48x48 -quality 100 "$f" converted/"$f";done
Конвертированные изображения в данном случае помещаются во вложенную папку converted, можно указать другой путь.

Cообщение объединено 03 апреля 2016, 12:18:55


В общем скорее всего дело не в конвертере, а скорее в каком-то типе фильтров при конвертации/ресайзе или еще в чем-то. Решил проблему с качеством путем поднятия контрастности изображений, так при конвертации они выглядят лучше.

PS. inkscape лучше справляется с конвертацией/ресайзом, чем imagemagick, при этом созданный inkscape файл больше.

Yrii

Ради интереса поэкспериментировал.
convert 1.svg -resize 24x24 -background none 1.png
все же выдает не такой результат, как в примере, что должно получится...
"игрался" с разными опциями/фильтрами... но ни чего не нашел... может не теми опциями/фильтрами "игрался"...

inkscape что-то ставить не охото и я так понял вопрос более или менее "решен"...

CoolAller


CoolAller

#9
Yrii, как это не смешно, но зря я вообще пытался ресайзить svg в png, при ресайзе мелкие png не будут четкими, нужно было просто сделать ресайз svg to svg))

Теперь другая проблема - нужна команда для пакетного ресайза svg через inkscape из терминала)