Кадрирование картинки в командной строке

| Python

Если вы любите фотографировать, то вероятно, время от времени обрезаете свои фотографии. Некоторые фотографы кадрируют свои фотографии, чтобы избавиться от фонового шума или просто сфокусировать взгляд зрителя на каком-либо предмете. Мне нравятся кадрировать фотографии с высоким разрешением цветов и других растений, чтобы было похоже, что фотограф был ещё ближе к объекту.

Для обрезки своих фотографий большинство людей используют приложение для редактирования растровых изображений, примером хорошего редактора может быть Gimp. Я также использую эти инструменты, но для аналогичных целей можно использовать язык программирования Python. Одним из примеров, когда целесообразно использовать Python, является случай, когда есть тысячи отсканированных изображений одного и того же типа. Тогда имеет смысл просто написать сценарий который сделает всю работу автоматически.

Самым популярным пакетом для манипуляции с изображениями в Python является пакет Pillow «Дружественный ответвление от библиотеки обработки изображений в Python (PIL)». Установить Pillow можно используя pip:

pip install Pillow

Теперь, когда у нас установлен Pillow, нам нужна фотография. Для примера взята картинка с подсолнухами.

Напишем немного кода, чтобы обрезать изображение показав только часть первого цветка:

from PIL import Image

def crop(image_path, coords, saved_location):
    """
    @param image_path: Путь к изображению для редактирования
    @param coords: Картеж из координат x/y (x1, y1, x2, y2)
    @param saved_location: Путь для сохранения обрезанного изображения
    """
    image_obj = Image.open(image_path)
    cropped_image = image_obj.crop(coords)
    cropped_image.save(saved_location)
    cropped_image.show()


if __name__ == '__main__':
    image = 'flowers.jpeg'
    crop(image, (80, 150, 300, 300), 'cropped.jpg')

Первое, что было сделано в коде – импорт модуля Image из PIL. Затем определяем функцию crop(), которая принимает 3 параметра:

  • image_path - путь к обрезаемому файлу
  • coords - 4-элементный кортеж, который содержит начальную и конечную координаты обрезки изображения
  • saved_location - путь к файлу для сохранения обрезанного файла

После вызова функции open производится возвращение объекта картинки у которой есть метод crop(). Метод crop() принимает координаты, которые были переданы аргументом в функцию и обрезает изображение с возвращением второго объекта изображения. Затем вызывается метод save() второго объекта изображения для сохранения его в указанном месте.

После запуска кода, будет показано обрезанное изображение с последующим его сохранением:

Вы можете немного поэкспериментировать с координатами x / y в приведенном выше коде для обрезки изображения различными способами, чтобы увидеть, как это работает.

Вывод

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

В любом случае Python библиотека Pillow действительно мощная и полезная в работе с изображениями.