Столкнулся с необходимостью быстрого конвертирования картинок, и вот нашёл решение. Естественно записал на будущее :)
$ convert -quality 90 -resize 640x640 большое-фото.jpg уменьшенное-фото.jpg
Программа convert позволяет автоматизировать многие операции обработки графики. В данном случае она берёт файл ( большое-фото.jpg ), уменьшает до размера, не превышающего 640x640 ( -resize 640x640 ), и сохраняет в формате JPEG с уровнем качества 90% ( -quality 90 ) уменьшенное изображение в файле уменьшенное-фото.jpg .
А если файлов много? Просто и быстро это можно сделать сделать одной командой командной оболочки выполненной в каталоге с фотографиями:
$ mkdir lowres; for f in *.jpg ; do convert -quality 90 -resize 640x640 “$f” “lowres/${f%.jpg}-640.jpg” ; done
Что делает эта команда: создаёт подкаталог lowres в текущем каталоге ( mkdir lowres ); далее для всех файлов с разрешением .jpg ( for f in *.jpg ; do … ; done ) вызывает программу конвертации ( convert ).
Программа ковертации сохраняет уменьшенные изображения в подкаталоге lowres под именем с окончанием -640.jpg . Так, если в исходном каталоге были изображения с именами мама.jpg , папа.jpg , я.jpg , то после выполнения указанной команды должен появиться подкаталог lowres/ с изображениями мама-640.jpg , папа-640.jpg , я-640.jpg . Изменённые имена файлов позволят не спутать их с исходными изображениями в высоком разрешении.
Набор команд между do и done повторяется несколько раз, для каждого файла подходящего по шаблону *.jpg . Имя обрабатываемого файла при этом хранится в “переменной” f . Запись $f позволяет получить это имя файла, а ${f%.jpg} отсекает ( % ) от имени файла окончание .jpg . Обратите внимание, что имена файлов берутся в двойные кавычки: “$f” , “${f%.jpg}-640.jpg” — это позволяет обрабатвать также имена файлов содержащие пробелы.
Конструкцию for f in шаблон ; do что сделать с каждым файлом ; done удобно использовать и для многих других целей. Например, для автоматического переименования или копирования файлов
Комментариев нет:
Отправить комментарий