详解Python PIL Image.frombytes()方法

  • Post category:Python

Python PIL库是一个操作图片的强大工具库,其中的Image类提供了许多对图片数据处理的方法,其中Image.frombytes()方法用于从字节数组中加载图片数据。

函数定义

Image.frombytes(mode, size, data, decoder_name=’raw’, *args)

  • mode:图片的像素模式,如“RGB”、“L”等。
  • size:图片的尺寸,形式为(width,height)。
  • data:字节数组类型的图片数据。
  • decoder_name:解码器的名称,可以直接设置为“raw”。

功能介绍

Image.frombytes()方法主要作用是将字节数组类型的图片数据转换为Image对象。它的四个参数分别表示图片的像素模式、尺寸、字节数组类型数据以及解码器的名称(默认为“raw”)。

示例1:从字节数组中加载PNG图像

import urllib.request
from PIL import Image

# 从网站下载图片数据
url = "https://www.example.com/example.png"
response = urllib.request.urlopen(url)
image_bytes = response.read()

# 从图片数据创建Image对象
img = Image.frombytes('RGB', (1000, 1000), image_bytes, 'raw')

# 显示图片
img.show()

这个例子演示了如何从网站中下载PNG图片数据,并使用Image.frombytes()方法将其转换为Image对象。在这个例子中,字节数组image_bytes存放着网站上下载到的PNG图片数据,由于图片是RGB模式的,因此Image.frombytes()方法的第一个参数应该设置为“RGB”,尺寸是1000×1000,而解码器使用默认的“raw”。

示例2:从字节数组中加载灰度图像

import io
from PIL import Image

# 将字符串转换为字节数组
s = 'abcdefghijklmnopqrstuvwxyz'
img_bytes = bytes(s, encoding='ascii')

# 从字节数组创建灰度图像
img = Image.frombytes('L', (13, 2), img_bytes)
img.show()

这个例子演示了如何从字符串创建灰度图像,并使用Image.frombytes()方法将其转换为Image对象。在这个例子中,我们将字符串“abcdefghijklmnopqrstuvwxyz”转换为字节数组img_bytes,由于它是灰度图像,因此Image.frombytes()方法的第一个参数应该设置为“L”,尺寸是13×2,而解码器使用默认的“raw”。

注意:字节数组的长度必须是像素点数乘以每个像素点的字节数。例如要加载一个100×100的RGB色彩模式的图像,字节数组长度为100 * 100 * 3 = 30000。