Класс UHelperTk: взаимодействие с библиотекой Tkinter
Графическая библиотека UImage тесно связана с библиотекой Tkinter. Выполнить преобразование между объектом UImage и объектом PhotoImage из библиотеки Tkinter позволяет класс UHelperTk. Инструкция импорта:
from unicross_image.uhelper_tk import UHelperTk
Преобразование объекта UImage в объект PhotoImage
Преобразовать объект UImage в объект PhotoImage из библиотеки Tkinter можно с помощью статического метода uimage_to_photoimage(). Формат метода:
uimage_to_photoimage(<UImage>)
В качестве параметра указывается объект UImage (альфа-канал не учитывается), UImageRGB или UImageGray. Наибольшей скорости выполнения можно достичь только с объектом UImageRGB, т. к. при использовании других объектов выполняется предварительное преобразование в формат RGB. Метод возвращает объект PhotoImage или значение None в случае ошибки. Отобразим изображение в компоненте Canvas:
from unicross_image.uimagergb import UImageRGB
from unicross_image.uhelper_tk import UHelperTk
from tkinter import *
root = Tk()
root.title("Метод uimage_to_photoimage()")
root.geometry("700x450")
canvas = Canvas(bg="white", width=600, height=400)
canvas.pack(anchor=CENTER, expand=1)
img = UImageRGB.load("foto.jpg")
# Преобразование в PhotoImage
img2 = UHelperTk.uimage_to_photoimage(img)
canvas.create_image(10, 10, anchor=NW, image=img2)
root.mainloop()
Статический метод create_photoimage_load_uimage() позволяет создать объект PhotoImage, загружая изображение из файла .uimage. Формат метода:
create_photoimage_load_uimage(<Название файла .uimage>)
Метод возвращает объект PhotoImage или значение None в случае ошибки. Наибольшей скорости выполнения можно достичь только с файлом формата RGB, т. к. при использовании других форматов выполняется предварительное преобразование в формат RGB. Альфа-канал при загрузке отбрасывается. Отобразим изображение из файла foto.uimage в компоненте Canvas:
from unicross_image.uhelper_tk import UHelperTk
from tkinter import *
root = Tk()
root.title("Метод create_photoimage_load_uimage()")
root.geometry("700x450")
canvas = Canvas(bg="white", width=600, height=400)
canvas.pack(anchor=CENTER, expand=1)
# Загрузка из файла и преобразование в PhotoImage
img2 = UHelperTk.create_photoimage_load_uimage("foto.uimage")
canvas.create_image(10, 10, anchor=NW, image=img2)
root.mainloop()
Преобразование объекта PhotoImage в объект UImage
Преобразовать объект PhotoImage из библиотеки Tkinter в объект UImage можно с помощью статического метода photoimage_to_uimage(). Формат метода:
photoimage_to_uimage(<PhotoImage>)
В качестве параметра указывается объект PhotoImage из библиотеки Tkinter. Метод возвращает объект класса UImage (альфа-канал будет содержать значения 255) или значение None в случае ошибки. Объект PhotoImage привязывается к объекту окна, поэтому при отсутствии объекта окна генерируется исключение. Пример преобразования:
from unicross_image.uhelper_tk import UHelperTk
from tkinter import *
root = Tk()
root.title("Метод photoimage_to_uimage()")
root.geometry("700x450")
canvas = Canvas(bg="white", width=600, height=400)
canvas.pack(anchor=CENTER, expand=1)
img = PhotoImage(file="foto.png")
# Преобразование PhotoImage в UImage
img2 = UHelperTk.photoimage_to_uimage(img)
print(img2)
# UImage(width=500, height=333)
canvas.create_image(10, 10, anchor=NW, image=img)
root.mainloop()
Загрузка и сохранение файлов в формате PNG
Загрузка изображений из стандартных графических форматов в библиотеке UImage выполняется с помощью библиотек PIL и ImageMagick. Если библиотеки PIL и ImageMagick недоступны, то можно загрузить изображение из стандартных графических форматов PNG и GIF с помощью объекта PhotoImage из библиотеки Tkinter. Класс PhotoImage поддерживает также файлы форматов PGM и PPM, но библиотека UImage позволяет загружать и сохранять такие файлы в бинарном формате самостоятельно.
Следует учитывать, что объект PhotoImage привязывается к объекту окна, поэтому при отсутствии объекта окна генерируется исключение. По этой причине загрузить изображение из файла при отсутствии объекта окна Tkinter не получится.
После загрузки изображения из файла можно выполнить преобразование с помощью метода photoimage_to_uimage(), который мы рассматривали в предыдущем разделе:
# Загрузка из файла
img = PhotoImage(file="foto.png")
# Преобразование PhotoImage в UImage
img2 = UHelperTk.photoimage_to_uimage(img)
print(img2) # UImage(width=500, height=333)
При этом существует также возможность непосредственной работы с файлами формата PNG. Для этой цели предусмотрены следующие статические методы.
load_png(<Путь>) — загружает изображение в формате PNG из файла и возвращает объект класса UImage (альфа-канал будет содержать значения 255) или значение None в случае ошибки. Объект PhotoImage привязывается к объекту окна, поэтому при отсутствии объекта окна метод вернет значение None. Пример загрузки:
# Загрузка из файла и преобразование PhotoImage в UImage
img2 = UHelperTk.load_png("foto.png")
print(img2)
# UImage(width=500, height=333)
Вместо метода load_png() можно воспользоваться аналогичным методом create_uimage_from_png(<Путь>), но он очень медленный из-за метода get() класса PhotoImage:
# Загрузка из файла и преобразование PhotoImage в UImage
img2 = UHelperTk.create_uimage_from_png("foto.png")
print(img2)
# UImage(width=500, height=333)
save_png_rgb(<UImage>, <Путь>) — сохраняет изображение из объектов UImage (альфа-канал не учитывается), UImageRGB или UImageGray в файл в формате PNG. Метод возвращает значение True, если операция выполнена успешно, и False — в противном случае. Объект PhotoImage привязывается к объекту окна, поэтому при отсутствии объекта окна метод вернет значение False. Пример:
im = UImageRGB.load("foto.jpg")
# Преобразование в PhotoImage и сохранение в файл
print(UHelperTk.save_png_rgb(im, "foto2.png"))
# True
Класс входит в состав графической библиотеки UImage для Python 3. Описание библиотеки UImage