Пакетное изменение размера изображений в новую папку с помощью ImageMagick
У меня есть папка с изображениями поверх 4MB
- позвоните в эту папку dsc_big/
. Я хотел бы использовать convert -define jpeg:extent=2MB
для преобразования их в 2MB
и скопировать dsc_big/*
в папку dsc_small/
, которая уже существует.
Я попробовал convert dsc_big/* -define jpeg:extent=2MB dsc_small/
, но создавал изображения с именем -0
, -1
и т.д.
Что мне делать?
Ответы
Ответ 1
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
не требуется, если вы обрабатываете файлы в текущем каталоге.
Ответ 2
Это была команда, которая помогла мне после долгих попыток.
Я хотел сделать миниатюры одинакового размера из большого списка больших изображений с переменной шириной и высотой. Это было для создания страницы галереи.
convert -define jpeg:size=250x200 *.jpg -thumbnail 250x200^ -gravity center -extent 250x200 crop/thumbnail-%d.jpeg
У меня появились миниатюры с размерами, которые имеют одинаковые ширины и высоты.:) благодаря ImageMagick.
Ответ 3
Хотя это старый вопрос, но я добавляю этот ответ в пользу кого-либо еще, который наткнулся на это.
У меня была такая же точная проблема, и, будучи обескуражен использованием mogrify
, я написал небольшую утилиту на основе Python под названием easymagick, чтобы облегчить этот процесс, используя внутреннюю систему с помощью команды convert
.
Обратите внимание, что это все еще продолжается. Я буду благодарен за любые отзывы, которые я могу получить.
Ответ 4
Здесь решение без, использующее для петель на консоли
convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
PS: Если модератор снова удалит мой ответ для "повторного ответа", я больше никогда не отправляю в переполнение стека. Прочтите решение, оно не идентично любому другому решению, которое не используется для циклов на консоли и использует ImageMagick, как запрошено человеком, который разместил вопрос. Если ответ нужно удалить, продолжайте удалять ответы, которые используют другие пакеты, поскольку они фактически не отвечают на вопрос
Ответ 5
Это работает для меня
convert -rotate 90 *.png rotate/image.jpg
создает изображение-0.jpg, image-1.jpg, image-2.jpg..... в папке "rotate". Не знаю, как сохранить исходные имена файлов.
Ответ 6
Я обнаружил, что 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