Python PIL库中的Image模块中提供了一个frombuffer()
静态方法,用来根据给定的像素数据和相应的模式,创建一个图像实例。下面是该方法的详细介绍和两个示例说明:
方法介绍
语法
PIL.Image.frombuffer(mode, size, data, decoder_name='raw', stride=None, flipped=False)
参数说明
- mode: 图像的模式字符串,包括’L’, ‘RGB’, ‘RGBA’, ‘CMYK’等。
- size: 图像的大小,如(320, 240)。
- data: 二进制像素数据,形如
\x00\x11\x22\x33...
。 - decoder_name: 解码器名称,缺省为’raw’。
- stride: 行的计数,也就是像素数据中每行的字节数,如果无此参数,则假定为size[0]。
- flipped: 取值为True或False,在图像上下翻转。
返回值
- Image实例对象。
示例说明
示例1
from PIL import Image
# 创建一个(200,200)大小,RGB模式的图像
img_data = b'\xff'*3*200*200 # b'\xff'是255的16进制数形如0xff
img = Image.frombuffer('RGB', (200, 200), img_data)
img.show() # 展示图片
代码中,通过给定模式’RGB’、大小(200,200)和像素数据,使用frombuffer
方法创建一个图片实例对象,最后展示图片。
示例2
from PIL import Image, ImageDraw
# 创建一个(300,300)大小,RGB模式的图像
img = Image.new('RGB', (300, 300))
# 创建一个draw对象用来在图片上绘制
draw = ImageDraw.Draw(img)
# 在图片上绘制一个矩形
draw.rectangle([(10,10), (290, 290)], fill=(255,0,0,0))
# 获得图片的像素数据和像素数
img_data = img.tobytes()
num_pixels = 300 * 300
# 更改第一个像素点的数值,这里利用'\x00\x00\x00'表示黑色的像素点
img_data = b'\x00\x00\x00' + img_data[3:]
# 创建一个新图像
new_img = Image.frombuffer('RGB', (300, 300), img_data)
# 显示结果
img.show()
new_img.show()
代码中,首先通过Image模块创建了一个(300,300)大小,RGB模式的空白图像;然后根据这个图像创建一个draw对象用来在图片上绘制,绘制完后得到该图像的像素数据img_data和像素数num_pixels;接着,将第一个像素点的数值更改,这里利用\x00\x00\x00
表示黑色的像素点,同时通过frombuffer
方法创建了一个新图像new_img,最后展示所有图像。