2012-01-03 2 views
38

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

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

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

ответ

48

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

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

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

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

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

+0

Также как я могу это сделать с помощью 'mogrify'? – tekknolagi

+2

Я добавил небольшой пример, показывающий mogrify и ссылку. –

+1

ImageMagick 6.8.0 может обрабатывать несколько файлов с конвертированием: 'convert * .jpg * .png'. Однако я не знаю, как обрабатывать имена выходных файлов, потому что ImageMagick просто устанавливает имя в последовательный номер (например: 1.png, 2.png, 3.png и т. Д.) –

1

Хотя это старый вопрос, но я добавляю этот ответ в пользу кого-либо еще, который наткнулся на это.

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

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

0

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

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

производит имиджевую 0.jpg, изображение-1.jpg, образ-2.jpg ..... в 'Ротация' папку. Однако не знаю, как сохранить исходные имена файлов.

+0

Используйте 'mogrify -path rotate -rotate 90 * .png' –

0

Я нашел, что cd-в нужную папку, а затем используя глобальную переменную 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

Рассмотрите возможность использования' '$ f" ', а не' $ f' в строках, начинающихся с 'width = ... 'и' filename = ... ', если в них есть имена файлов с пробелами. –

4

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

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

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

1

Вот решение без используя для петель на консоли

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]' 

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