无法将tiff PIL图像转换为字节数组
我有一张.tiff格式的图片,已经加载到PIL图像库里,现在我想把它转换成字节数组。
我现在的做法是这样的:
from PIL import Image
import io
def image_to_byte_array(image: Image) -> bytes:
imgByteArr = io.BytesIO()
image.save(imgByteArr, format=image.format)
imgByteArr = imgByteArr.getvalue()
return imgByteArr
im = Image.open(r"ImagePath")
im_bytes = image_to_byte_array(im)
问题出现在我尝试把图片保存到imgByteArr的时候。
有些.tiff图片会出现设置字典时出错的提示,另外我还收到_TIFFVSetField: : 忽略标签 "OldSubfileType"(libtiff不支持)的错误信息。
有没有什么办法可以解决这些问题呢?
这里有一张示例图片
1 个回答
0
我现在有点急,但图片里有一些东西(我猜是标签、压缩或者某个属性)让你无法写入这张图片。
你可以更简单地看到产生的错误,像这样:
from PIL import Image
im = Image.open(...path...)
im.save('anything.tif')
一种去掉所有扩展属性和元数据的方法是把图片转换成一个 Numpy 数组,然后再从这个数组转换回 PIL 图片。这个通过 Numpy 的“来回转换”不能传递任何属性,只能处理像素,所以这样就可以正常工作了:
import numpy as np
from PIL import Image
im = Image.open(...path...)
# Round-trip through Numpy array to strip attributes and metadata
im = Image.fromarray(np.array(im))
im.save('anything.tif') # works
等我有时间再深入研究一下,但这可能是一个临时的解决办法。