44

我正在尝试验证一个字节数组是否先将其写入磁盘,然后Image.open使用. 我看着和Image.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

然后作为一项基本测试,我尝试将字节数组转换为图像:

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

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

PS:我认为我需要字节数组,因为我对字节进行操作(将它们的图像弄错)。这确实有效,但我想这样做而不是将其写入磁盘,然后再次从磁盘打开图像文件以检查它是否损坏。

编辑:它给我的只是一个IOError: cannot identify image file

4

1 回答 1

58

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

import os
import io
import PIL.Image as 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)
于 2013-08-28T15:34:01.473 回答