详解Python PIL Image.frombytes()方法

  • Post category:Python

Python PIL库中的Image模块提供了从不同源类型(如文件、字节流或内存数据)加载图像数据或从特定形式编码的二进制数据创建图像实例的方法。其中,Image.frombytes()方法允许从原始像素数据的字节字符串中创建图像。

方法语法

Imag1e.frombytes(mode, size, data, decoder_name='raw', *args)

方法参数

  • mode: 图像的颜色模式。这个参数与Image类里mode的属性类似,因为frombytes方法没有解析器去保存模式信息;
  • size: 图像的尺寸(宽度和高度);
  • data: 图像的原始像素数据的字节字符串;
  • decoder_name: 解码器名称(如果不使用默认值’raw’);
  • *args:解码器可接受的其他可选参数。

方法返回值

  • 返回一个新的Image对象。这个对象的大小是由从数据中计算的大小决定的,mode是传递给方法的模式。

示范例子 1

下面是一个使用Image.frombytes()方法,从像素数据中创建一个8*8的黑白棋盘图像的示例。

from PIL import Image

# whitespace
w = (255, 255, 255, 255)
# blackspace
b = (0, 0, 0, 255)

data = bytes(((b if ((i//8) % 2 == 0 and i % 2 == 0) or 
            ((i//8) % 2 == 1 and i % 2 == 1) else w) for i in range(8*8)))

img = Image.frombytes('RGBA', (8, 8), data)
img.show()

示范例子 2

下面是一个使用Image.frombytes()方法,从包含压缩后JPEG文件中的原始字节数据中创建图像的示例。 这里通过使用zlib来打开压缩的JPEG图片。

from PIL import Image
import zlib

# load and decompress image data
cn = zlib.decompress(open('image.jpg', 'rb').read())
img = Image.frombytes('RGB', (int(len(cn) ** 0.5), int(len(cn) ** 0.5)), cn)

# show image
img.show()

这个示例需要的是一个名为’ image.jpg’的压缩JPG文件。