Декабрь — тяжелая пора для всех студентов. Я не исключение. Сегодня срочно пришлось сканировать (точнее фотографировать) лекции и рассылать их однокурсникам. Изображений получилось много и некогда было тратить время на всякие программы вроде Scan Tailor и gscan2pdf (обе есть в репозиториях Ubuntu). Да и зачем, если под рукой есть ImageMagick и любимый скриптовый язык (в моем случае Python).
Фотографии получились, во-первых, большие, т.к. я поленился лезть в настройки фотоаппарата. Во-вторых, вокруг листов с лекцией было много лишнего пространства.
Таким образом, мне нужно было решить две задачи:
convert -crop {size}{+-}x{+-}y input.png output.png
На деле это выглядит так:
convert -crop 500x640+60+80 input.png output.png
Чтобы понять что значит эта команда, необходимо обратиться к рисунку.
Допустим, весь лист это наше исходное изображение. Серый прямоугольник это полезная область, которая нам нужна, а все остальные поля можно обрезать. Пунктирная линия для наглядности. Серая область имеет размер 500x640 пикселей и отстоит от левого края на 60, от верхнего на 80 px.
Командой выше мы указываем область, которую надо оставить и смещение относительно верхнего левого угла изображения. Это аналогично программам с грфическим интерфейсом, там при кадрировании появляется прямоугольник, который выделяет полезную область. А в случае с ImageMagick этот прямоугольник мнимый.
Итак, применив команду "convert -crop 500x640+60+80 input.png output.png" к моему примеру я получил четко серый прямоугольник:
convert -crop 500x640+60+80 *.png output.png
Как видите, я заменил название исходного файла на звездочку, это означает, что надо обрабатывать все фотографии в папке с расширением .png.
В качестве выходящего файла я написал output.png, программа сама добавила всем обработанным файлам концовку в виде числа. Т.е. в итоге у меня в папке появились изображения output-0.png, output-1.png, ..., output-n.png.
После этого я загнал все изображения в один PDF файл. И тоже при помощи ImageMagick. Впрочем, это уже тема другого поста.
За основу я взял свой скрипт py_magick, и изменил в нем всего две строчки. Не буду останавливаться на подробностях работы всего скрипта, они есть в руководстве к нему.
Изменить нужно 78 и 90 строки, вместо:
78 str = 'convert "%s" -resize %sx -quality 95 %s/"%s"' % (file, width, out, file)
и
90 str = 'convert "%s" -resize x%s -quality 95 %s/"%s"' % (file, height, out, file)
написать:
78 str = 'convert -crop 500x640+320+50 "%s" %s/"%s"' % (file, out, file)
90 str = 'convert -crop 640x500+320+50 "%s" %s/"%s"' % (file, out, file)
В 78 строке прописываются параметры для альбомно-ориентированных изображений, в 90 для портретно.
Фотографии получились, во-первых, большие, т.к. я поленился лезть в настройки фотоаппарата. Во-вторых, вокруг листов с лекцией было много лишнего пространства.
Таким образом, мне нужно было решить две задачи:
- массово уменьшить размеры фотографий
- массово кадрировать фотографии
Кадрирование изображений с помощью ImageMagick
Кадрирование осуществляется простой командой:convert -crop {size}{+-}x{+-}y input.png output.png
На деле это выглядит так:
convert -crop 500x640+60+80 input.png output.png
Чтобы понять что значит эта команда, необходимо обратиться к рисунку.
Допустим, весь лист это наше исходное изображение. Серый прямоугольник это полезная область, которая нам нужна, а все остальные поля можно обрезать. Пунктирная линия для наглядности. Серая область имеет размер 500x640 пикселей и отстоит от левого края на 60, от верхнего на 80 px.
Командой выше мы указываем область, которую надо оставить и смещение относительно верхнего левого угла изображения. Это аналогично программам с грфическим интерфейсом, там при кадрировании появляется прямоугольник, который выделяет полезную область. А в случае с ImageMagick этот прямоугольник мнимый.
Итак, применив команду "convert -crop 500x640+60+80 input.png output.png" к моему примеру я получил четко серый прямоугольник:
Массовое кадрирование изображений
Перед тем, как массово обрезать все фотографии с лекциями, мне пришлось потренироваться на одной из них, чтобы найти оптимальную область. А затем применил команду:convert -crop 500x640+60+80 *.png output.png
Как видите, я заменил название исходного файла на звездочку, это означает, что надо обрабатывать все фотографии в папке с расширением .png.
В качестве выходящего файла я написал output.png, программа сама добавила всем обработанным файлам концовку в виде числа. Т.е. в итоге у меня в папке появились изображения output-0.png, output-1.png, ..., output-n.png.
После этого я загнал все изображения в один PDF файл. И тоже при помощи ImageMagick. Впрочем, это уже тема другого поста.
Массовое кадрирование изображений с разной ориентацией
Данное действие стало моим коронным номером. Если есть необходимость кадрировать изображения с разной ориентацией, то для них нужно подобрать свои пропорции оставляемой области.За основу я взял свой скрипт py_magick, и изменил в нем всего две строчки. Не буду останавливаться на подробностях работы всего скрипта, они есть в руководстве к нему.
Изменить нужно 78 и 90 строки, вместо:
78 str = 'convert "%s" -resize %sx -quality 95 %s/"%s"' % (file, width, out, file)
и
90 str = 'convert "%s" -resize x%s -quality 95 %s/"%s"' % (file, height, out, file)
написать:
78 str = 'convert -crop 500x640+320+50 "%s" %s/"%s"' % (file, out, file)
90 str = 'convert -crop 640x500+320+50 "%s" %s/"%s"' % (file, out, file)
В 78 строке прописываются параметры для альбомно-ориентированных изображений, в 90 для портретно.
Комментариев нет:
Отправить комментарий