Отображение других типов графических изображений с помощью PIL

otobrazhenie drugih tipov graficheskih izobrazhenij s pomoshhju pil Экскурсия по tkinter, часть 1

В предыдущих примерах работы с изображениями мы прикрепляли виджеты к кнопкам и холстам, однако стандартный набор инструментов библиотеки tkinter позволяет прикреплять изображения к виджетам различных типов, включая простые метки, текстовые виджеты и элементы меню. Так, сценарий в примере 8.42 отображает изображение в метке, находящейся в главном окне приложения, используя только средства библиотеки tkinter. Этот сценарий предполагает, что изображения хранятся в подкаталоге images, а также позволяет передавать имя файла с изображением в аргументе командной строки (при отсутствии аргументов по умолчанию используется файл spam.gif). Кроме того, для большей переносимости он объединяет имена файлов и каталогов с помощью os.path.join и выводит высоту и ширину изображения в пикселях в стандартный поток вывода, исключительно чтобы предоставить дополнительную информацию.

Пример 8.42. PP4E\Gui\PIL\viewer-tk.py

отображает изображение с помощью стандартного объекта PhotoImage из библиотеки tkinter; данная реализация может работать с GIF-файлами, но не может обрабатывать изображения в формате JPEG; использует файл с изображением, имя которого указано в командной строке, или файл по умолчанию; используйте Canvas вместо Label, чтобы обеспечить возможность прокрутки, и т.д.

import os, sys

from tkinter import * # использовать стандартный объект PhotoImage

# работает с форматом GIF, а для работы с форматом JPEG # требуется пакет PIL

imgdir = images

imgfile = london-2010.gif

if len(sys.argv) > 1: # аргумент командной строки задан?

imgfile = sys.argv[1]

imgpath = os.path.join(imgdir, imgfile)

win = Tk()

win.title(imgfile)

imgobj = PhotoImage(file=imgpath)

Label(win, image=imgobj).pack() # прикрепить к метке Label

print(imgobj.width(), imgobj.height()) # вывести размеры в пикселях, win.mainloop() # пока объект не уничтожен

На рис. 8.43 изображено окно этого сценария в Windows 7, где отображается изображение из GIF-файла по умолчанию. Запустите его из консоли, передав имя файла в виде аргумента командной строки, чтобы просмотреть другое изображение из подкаталога images (например, python viewer_tk.py filename.gif).

Рис. 8.43. Отображение картинки в формате GIF средствами tkinter

Сценарий в примере 8.42 может работать только с изображениями, форматы которых поддерживаются базовым набором инструментов в библиотеке tkinter. Для отображения изображений в других форматах, таких как JPEG, необходимо установить пакет PIL и использовать его альтернативную реализацию класса PhotoImage. С точки зрения программного кода, для этого достаточно добавить всего одну инструкцию import, как показано в примере 8.43

Пример 8.43. PP4E\Gui\PIL\viewer-pil.py

отображает изображение с помощью альтернативного объекта из пакета PIL поддерживает множество форматов изображений; предварительно установите пакет PIL: поместите его в каталог Lib\sitepackages

import os, sys

from tkinter import *

from PIL.ImageTk import PhotoImage # <== использовать альтернативный класс из

#  PIL, остальной программный код

#  без изменений

imgdir = ‘images’

imgfile = ‘florida-2009-1.jpg’ # поддерживает gif, jpg, png, tiff, и др.

if len(sys.argv) > 1:

imgfile = sys.argv[1]

imgpath = os.path.join(imgdir, imgfile)

win = Tk()

win.title(imgfile)

imgobj = PhotoImage(file=imgpath) # теперь поддерживает и JPEG!

Label(win, image=imgobj).pack()

win.mainloop()

print(imgobj.width(), imgobj.height()) # показать размер в пикселях при выходе

Задействовав пакет PIL, наш сценарий теперь способен отображать изображения в самых разных форматах, включая формат JPEG картинки по умолчанию, изображенной на рис. 8.44. Поэкспериментируйте со сценарием самостоятельно и попробуйте отобразить другие картинки.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий