Шаг 222.
Основы языка Python.
Библиотека Pillow. Работа с изображениями. Загрузка готового изображения

    На этом шаге мы рассмотрим особенности выполнения загрузки и сохранения готового изображения.

    Для открытия файла с готовым изображением служит функция open(). Функция возвращает объект, с помощью которого производится дальнейшая работа с изображением. Если открыть файл с изображением не удалось, возбуждается исключение IOError. Формат функции:

  open(<Путь или файловый объект>[, mode='r'])

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

    Откроем файл cars.gif, который расположен в текущем рабочем каталоге:

>>> img = Image.open("cars.gif")

    Вместо указания пути к файлу можно передать файловый объект, открытый в бинарном режиме. Пример:

>>> f = open ("cars.gif", "rb") # Открываем файл в бинарном режиме
>>> img = Image.open (f)  # Передаем объект файла
>>> img.size  # Получаем размер изображения
(366, 227)
>>> img.format # Выводим формат изображения
'GIF'
>>> f.close () # Закрьваем файл

    Как видно из примера, формат изображения определяется автоматически. Следует также заметить, что после открытия файла с помощью функции open() само изображение не загружается сразу из файла в память - загрузка производится при первой операции с изображением.

    Загрузить изображение явным образом, если такая нужда возникнет, позволяет метод load() объекта изображения. Он возвращает объект, с помощью которого можно получить доступ к отдельным пикселам изображения. Указав внутри квадратных скобок два значения: горизонтальную и вертикальную координаты пикселя, можно получить или задать его цвет.

>>> img = Image.open("cartitle.jpg")
>>> obj = img.load()
>>> obj[25, 45] # Получаем цвет пикселя
(91, 126, 96)
>>> obj[25, 45] = (255, 0, 0) # Задаем цвет пикселя (красный)

    Для доступа к отдельному пикселю вместо метода load() можно использовать методы getpixel() и putpixel(). Метод getpixel (<Координаты>) позволяет получить цвет указанного пикселя, а метод putpixel (<Координаты>, <Цвет>) изменяет цвет пикселя. Координаты пикселя указываются в виде кортежа из двух элементов. Необходимо заметить, что эти методы работают медленнее метода load (). Пример использования методов getpixel() и putpixel() приведен ниже.

>>> img = Image.open("cartitle.jpg")
>>> img.getpixel((25, 45)) # Получаем цвет пикселя
(91, 126, 96)
>>> img.putpixel((25, 45), (255, 0, 0)) # Изменяем цвет пикселя
>>> img.getpixel((25, 45)) # Получаем цвет пикселя
(255, 0, 0)
>>> img.show() # Просматриваем изображение

    В этом примере для просмотра изображения мы воспользовались методом show(). Метод show() создает временный файл в формате BMP и запускает программу для просмотра изображений, используемую в операционной системе по умолчанию.

    Для сохранения изображения в файл предназначен метод save(). Формат метода:

  save(<Путь или файловый объект>[, <Формат>[, <Опции>]])

    В первом параметре указывается абсолютный или относительный путь. Вместо пути можно передать файловый объект, открытый в бинарном режиме. Сохраним изображение в форматах JPEG и BMP разными способами.

>>> img = Image.open("cars.gif")
>>> img.save("tmp.jpg") # В формате JPEG
>>> img.save("tmp.bmp", "BMP") # В формате BMP
>>> f = open("tmp2.bmp", "wb")
>>> img.save(f, "BMP") # Передаем файловый объект
>>> f.close()

    Обратите внимание на то, что мы открыли файл в формате GIF, а сохранили его в форматах JPEG и BMP. To есть, можно открывать изображения в одном формате и конвертировать их в другой формат. Если сохранить изображение не удалось, возбуждается исключение IOError. Когда параметр <Формат> не задан, формат изображения определяется по расширению файла, однако если методу save() в качестве первого параметра передан файловый поток, формат должен быть указан.

    В параметре <Опции> можно передать дополнительные опции. Поддерживаемые опции зависят от формата изображения. Например, по умолчанию изображения в формате JPEG сохраняются с качеством 75. С помощью опции quality можно указать другое значение в диапазоне от 1 до 100. Пример:

>>> img.save ("tmp3.jpg", "JPEG", quality=100) # Указание качества

    За дополнительной информацией по опциям обращайтесь к соответствующей документации.

    На следующем шаге мы рассмотрим создание нового изображения.




Предыдущий шаг Содержание Следующий шаг