PIL:将Bytearray转换为Image

时间:2013-08-28 14:55:48

标签: python arrays image byte python-imaging-library

我正在尝试使用Image.openImage.verify()验证字节数,而不先将其写入磁盘,然后使用im = Image.open()将其打开。我查看了.readfrombuffer().readfromstring()方法,但是我需要图像的大小(我只能在将字节流转换为图像时才能获得)。

我的阅读功能如下:

def readimage(path):
    bytes = bytearray()
    count = os.stat(path).st_size / 2
    with open(path, "rb") as f:
        print "file opened"
        bytes = array('h')
        bytes.fromfile(f, count)
    return bytes

然后作为基本测试,我尝试将bytearray转换为图像:

bytes = readimage(path+extension)
im = Image.open(StringIO(bytes))
im.save(savepath)

如果有人知道我做错了什么,或者是否有更优雅的方法将这些字节转换为真正帮助我的图像。

P.S。:我以为我需要bytearray,因为我对字节进行了操作(故障图像)。这确实有效,但是我想这样做而不将其写入磁盘,然后再次从磁盘打开图像文件以检查它是否坏了。

编辑:它给我的全部是IOError: cannot identify image file

1 个答案:

答案 0 :(得分:20)

如果您使用bytearrays进行操作,则必须使用io.BytesIO。您也可以直接将文件读取到bytearray

import os
import io
import Image
from array import array

def readimage(path):
    count = os.stat(path).st_size / 2
    with open(path, "rb") as f:
        return bytearray(f.read())

bytes = readimage(path+extension)
image = Image.open(io.BytesIO(bytes))
image.save(savepath)