Пакетное изменение размеров изображений в новую папку с помощью ImageMagick - PullRequest
39 голосов
/ 03 января 2012

У меня есть папка с изображениями свыше 4MB - назовем эту папку dsc_big/.Я хотел бы использовать convert -define jpeg:extent=2MB, чтобы преобразовать их в 2MB и скопировать dsc_big/* в папку dsc_small/, которая уже существует.

Я пробовал convert dsc_big/* -define jpeg:extent=2MB dsc_small/, но при этом появляются изображения с именем -0, -1 и т. Д.

Что мне делать?

Ответы [ 6 ]

51 голосов
/ 03 января 2012
Насколько я могу судить,

convert предназначен для обработки одного входного файла, хотя должен признать, что не понимаю, какой вывод вы получаете. mogrify лучше подходит для пакетной обработки в следующем стиле:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/*

Но, честно говоря, я считаю это опасным для общего использования (оно перезапишет исходные изображения, если вы забудете об этом -path), поэтому я всегда использую convert в сочетании с циклом for:

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done

Вызов basename не требуется, если вы обрабатываете файлы в текущем каталоге.

4 голосов
/ 25 февраля 2016

Это была команда, которая помогла мне после долгой попытки.Я хотел сделать миниатюры одинакового размера из большого списка больших изображений с переменной шириной и высотой.Это было для создания страницы галереи.

convert -define jpeg:size=250x200 *.jpg  -thumbnail 250x200^ -gravity center -extent 250x200  crop/thumbnail-%d.jpeg

Я получил уменьшенные миниатюры, которые имеют одинаковую ширину и высоту.:) благодаря ImageMagick.

3 голосов
/ 18 февраля 2017

Вот решение без с использованием циклов for на консоли

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
1 голос
/ 11 октября 2013

Хотя это старый вопрос, но я добавляю этот ответ в интересах всех, кто сталкивается с этим.

У меня возникла та же самая проблема, и я разочарован использованием mogrify, Я написал небольшую утилиту на основе Python easymagick , чтобы упростить этот процесс при внутреннем использовании команды convert.

Обратите внимание, это все еще в стадии разработки.Буду признателен за любые отзывы, которые я смогу получить.

0 голосов
/ 16 декабря 2015

Я обнаружил, что cd -ing в нужную папку, а затем с помощью глобальной переменной bash $PWD заставил мой convert не выдавать никаких ошибок. Я использую недавно реализованную функцию ImageMagick caption: http://www.imagemagick.org/Usage/text/#caption, чтобы пометить мои изображения базовым именем файла и поместить их в другой каталог в первом.

cd ~/person/photos
mkdir labeled
for f in $PWD/*.JPG; do
    width=$(identify -format %w $f)
    filename=$(basename $f .JPG)
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100  caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg";
done
0 голосов
/ 29 мая 2015

Это работает для меня

convert -rotate 90 *.png rotate/image.jpg 

производит image-0.jpg, image-1.jpg, image-2.jpg ..... в папке 'rotate'.Не знаю, как сохранить оригинальные имена файлов.

...