Python Pillow 简明教程
Python Pillow with Tkinter BitmapImage and PhotoImage objects
python pillow 库中的 ImageTk 模块提供了从 PIL 图像创建和操作 Tkinter BitmapImage 和 PhotoImage 对象的功能。本教学讨论了 ImageTk 模块内关键类和方法的描述。
这些类和方法提供了使用 PIL 在 Python 中操作 Tkinter 图像的便利方法,允许将图像集成到图形用户界面中。
Tkinter BitmapImage class in Python Pillow
ImageTk.BitmapImage 类表示与 Tkinter 兼容的位图图像,可以在 Tkinter 期待图像对象的所有位置使用它。
以下是有关该类的关键详细信息:
-
提供的图像必须具有“1”模式。
-
值为 0 的像素被认为是透明的。
-
如果提供了其他选项,则将它们转发到 Tkinter。
-
一个常用的选项是前景,允许为非透明部分指定颜色。
以下是 ImageTk.BitmapImage() 类的语法:
class PIL.ImageTk.BitmapImage(image=None, **kw)
其中,
-
image − 模式为“1”的 PIL 图像。值为 0 的像素被视为透明的。
-
**kw − 传递给 Tkinter 的其他选项。最常用的选项是 foreground,它指定非透明部分的颜色。
以下是 BitmapImage 类提供的方法列表−
-
height() − 以像素为单位返回图像的高度。
-
width() − 以像素为单位返回图像的宽度。
Example
以下示例演示了如何创建 Tkinter 窗口,利用 PIL 加载图像,再使用 ImageTk.BitmapImage 创建与 Tkinter 兼容的图像对象,并将其显示在 Tkinter Label 中。
from tkinter import *
from PIL import ImageTk, Image
# Create a Tkinter window
root = Tk()
# Create a sample image 1-bit mode image (black and white)
pil_image = Image.new("1", (700, 300), color=1)
# Create a BitmapImage from the PIL image
bitmap_image = ImageTk.BitmapImage(pil_image, background='', foreground='gray')
# Display the BitmapImage in a Tkinter Label
label = Label(root, image=bitmap_image)
label.pack()
# Run the Tkinter event loop
root.mainloop()
The PhotoImage class in Python Pillow
ImageTk.PhotoImage() 类在 Pillow 中表示与 tkinter 兼容的照片图像,适用于 Tkinter 期望图像对象的所有场合。
以下是有关该类的关键详细信息:
-
如果图像为 RGBA 格式,则 alpha 值为 0 的像素被视为透明的。
-
构造函数可以用 PIL 图像或模式和大小进行初始化。或者,您可以选择使用 file 或 data 参数初始化照片图像对象。
以下是 ImageTk.PhotoImage() 类的语法−
class PIL.ImageTk.PhotoImage(image=None, size=None, **kw)
其中,
-
image − 表示 PIL 图像或模式字符串。如果使用模式字符串,还必须提供一个大小。
-
size − 如果第一个参数是一个模式字符串,它定义图像的大小。
-
file − 要从中使用 Image.open(file) 加载图像的文件名。
-
data − 一个 8 位字符串,包含从图像文件中加载的图像数据。
以下是 PhotoImage() 类提供的方法列表−
-
height() − 获取图像的高度(以像素为单位)。
-
width() − 获取图像的宽度(以像素为单位)。
-
paste(im) − 将 PIL 图像粘贴到照片图像中。请注意,如果显示了照片图像,则这一过程可能会变慢。
-
Parameters − im - 一个 PIL 图像。大小必须与目标区域匹配。如果模式不匹配,图像将被转换为位图图像的模式。
Example
以下是演示如何创建 Tkinter 窗口、使用 PIL 加载图像,然后使用 ImageTk.PhotoImage 为可在 Tkinter 标签中显示的 Tkinter 兼容图像对象创建 Tkinter 窗口的示例。
from tkinter import *
from PIL import ImageTk, Image
# Create a Tkinter window
root = Tk()
# Create a canvas widget
canvas = Canvas(root, width=700, height=400, bg='white')
canvas.grid(row=2, column=3)
# Load an image using PIL and create a PhotoImage
pil_image = Image.open("Images/pillow-logo-w.jpg")
tk_image = ImageTk.PhotoImage(pil_image)
# Draw the image on the canvas
canvas.create_image(20, 20, anchor=NW, image=tk_image)
# Start the Tkinter event loop
mainloop()