将PIL图像转换为bytearray

时间:2016-07-28 03:38:39

标签: python python-imaging-library

在C#中,我可以使用Bitmap.lockbits()来访问位图作为字节数组。如何在PIL中执行此操作?我尝试过Image.write(),但是它将一个完整格式的图像写入了一个流。

2 个答案:

答案 0 :(得分:6)

from io import BytesIO
from PIL import Image

with BytesIO() as output:
    with Image.open(path_to_image) as img:
        img.save(output, 'BMP')
    data = output.getvalue()

答案 1 :(得分:0)

  

..警告::

     

此方法从内部返回原始图像数据      存储。对于压缩的图像数据(例如PNG,JPEG),请使用      :meth:~.save,带有用于内存的BytesIO参数      数据。

这是 tobytes 方法中的警告。因此,我们可以将 save 方法与BytesIO参数一起使用以获取压缩的字节数组。

import io

byteIO = io.BytesIO()
image.save(byteIO, format='PNG')
byteArr = byteIO.getvalue()