В GraphicsMagick, как я могу указать выходной файл для большого количества файлов?

Я хочу преобразовать группу файлов, но не перезаписывать существующий файл. Как я могу использовать mogrify, чтобы указать окончательный формат файла? Например, firstpic.png -> firstpic-thumbnail.png, secondpic.png -> secondpic-thumbnail.png и т. д.

gm mogrify -size 150x150 *.png -resize 150x150 +профиль "*" "%f-thumbnail.png"

Есть какой-либо способ сделать это?


person Matt Kim    schedule 04.07.2014    source источник


Ответы (2)


Я не знаю, есть ли способ указать формат выходного файла из mogrify, но вместо этого я бы использовал convert с простым циклом bash:

for f in *.jpg; 
do 
    convert "$f" -resize 150x150 +profile "*" "${f%.jpg}-thumbnail.jpg"; 
done;

Или, если вы действительно хотите использовать mogrify, вы можете использовать -output-directory (подробнее об этой опции здесь), чтобы поместить новые файлы в отдельный каталог, а затем позаботиться о переименовании:

mkdir tmp;
gm mogrify -output-directory tmp -size 150x150  -resize 150x150 +profile "" "*.jpg";
for f in tmp/*.jpg; 
do 
    mv "$f" "${f%.jpg}-thumbnail.jpg"; 
done;
mv tmp/* .;
rm -rf tmp;

Первый способ мне больше нравится ;)

person pwlmaciejewski    schedule 05.07.2014
comment
Этот ответ правильный (+1). Для одноразовых запусков я использую скрипт для запуска gm convert для каждого, но если я делаю много изображений, я обычно использую что-то вроде вашего второго метода, чтобы избежать повторной перезагрузки gm. Мне кажется, что -name имя файла или подобное было бы полезно добавить в mogrify. И ImageMagick, и GraphicsMagick имеют параметр -name, но документация по нему довольно скудна, и mogrify не распознает его. - person Glenn Randers-Pehrson; 05.07.2014

Если формат вывода (расширение) отличается от формата ввода, файлы не будут перезаписаны. Если они одинаковы, вы можете использовать этот трюк, который заставляет их казаться «разными» для этой цели, но на самом деле они одинаковы, но отличаются в случае расширения:

gm mogrify -resize 150x150 -format PNG +profile "*" *.png

РЕДАКТИРОВАТЬ:

Я не знаю средства в «mogrify» для переименования выходных файлов, кроме указания другого каталога или другого расширения. Итак, ответ fragphace правильный; вам нужно будет использовать сценарий, чтобы переименовать их. В сочетании с моим ответом:

gm mogrify -resize 150x150 -format PNG +profile "*" *.png
for file in *.PNG
do
   basename=`echo $file | sed -e "s/.PNG//"`
   mv $basename.PNG $basename-thumbnail.png
done
person Glenn Randers-Pehrson    schedule 04.07.2014
comment
Я хочу сохранить расширение файла таким же, но добавить имя файла... чтобы исходный файл выглядел как photo.png, а новый файл — как photo-thumbnail.png. Я хочу добавить эскиз к каждому файлу в каталоге. Есть ли способ сделать это? - person Matt Kim; 05.07.2014
comment
Не напрямую. Фрагфейс правильный; вы должны использовать сценарий. Я изменил свой ответ соответственно. - person Glenn Randers-Pehrson; 05.07.2014