从Python io.BufferedReader类的实例读取/打开映像

从Python io.BufferedReader类的实例读取/打开映像,python,image,opencv,python-imaging-library,google-cloud-dataflow,Python,Image,Opencv,Python Imaging Library,Google Cloud Dataflow,我正在努力从Python的io.BufferedReader类的实例中正确打开TIFF图像。我使用下面的库从GCS路径下载图像,但我无法打开,似乎无法使用传统工具打开图像 # returns the <_io.BufferedReader> file = beam.io.gcp.gcsio.GcsIO().open("<GCS_PATH>", 'r') from PIL import Image img = Image.open(file.read()) <

我正在努力从Python的
io.BufferedReader
类的实例中正确打开TIFF图像。我使用下面的库从GCS路径下载图像,但我无法打开,似乎无法使用传统工具打开图像

# returns the <_io.BufferedReader>
file = beam.io.gcp.gcsio.GcsIO().open("<GCS_PATH>", 'r')

from PIL import Image    
img = Image.open(file.read()) <---- Fails with "TypeError: embedded NUL character"

img = Image.open(file.raw) <--- Fails when any operations are performed with "IOError(err)"
with beam.io.gcp.gcsio.GcsIO().open(file_path, 'r') as file, Image.open(io.BytesIO(file.read())) as multi_page_tiff:
     do_stuff()

它失败并出现IOError,声明
tempfile.tif:无法读取TIFF头。

请确保将两者都包装在ContextManager中,以便它们都正确关闭

with beam.io.gcp.gcsio.GcsIO().open(file_path, 'r') as file, Image.open(io.BytesIO(file.read())) as multi_page_tiff:
     do_stuff()

img=Image.open(bufferedreader)
Ok。我认为我使用的PIL版本可能有问题,因为当我这样做,然后继续执行任何操作,例如
img\u array=np.array(img,dtype=np.uint8)
img.show()
时,我会得到一个以
tempfile.tif开头的错误:无法读取TIFF头。
并以
raise IOERR(err)结尾IOError:-2
StringIO
用于文本数据,
字节IO
用于二进制-您需要二进制。再看看
BytesIO
确实支持seek,所以试试看。
img=Image.open(io.BytesIO(file.read())
似乎正在工作@RyanStack我建议您自己添加答案,以便其他人可以从中受益:)