Image.fromarray不能与array.array一起使用

时间:2017-04-05 11:10:34

标签: python arrays image python-3.x

我使用的是Python 3.6和Pillow 4.0.0 我正在尝试从值数组中创建PIL图像,请参阅下面的简化代码,我在调用AttributeError: 'array.array' object has no attribute '__array_interface__'函数时收到以下错误:Image.fromarray()

为什么会这样? 当PIL文档说: 从导出阵列接口的对象创建映像内存(使用缓冲区协议)。 和array.array文档说: 数组对象也实现缓冲区接口,并且可以在支持类似字节的对象的任何地方使用......

from PIL import Image
from array import array

arr = array('B', [100, 150, 200, 250])
im = Image.fromarray(arr)
im.show()

2 个答案:

答案 0 :(得分:2)

数组接口是NumPy概念:ref。换句话说,Image.fromarray只能在numpy数组上运行,而不能在标准Python库array.array上运行。

答案 1 :(得分:0)

您必须使用array interfaceusing the buffer protocol),试试这个:

from PIL import Image
import numpy as np

w, h = 512, 512
data = np.zeros((h, w, 4), dtype=np.uint8)

for i in range(w):
    for j in range(h):
        data[i][j] = [100, 150, 200, 250]

img = Image.fromarray(data, 'RGB')

img.show()

您可以阅读An Introduction to the Python Buffer Protocol