我在Python3上使用Pillow (版本5.2.0)打开PNG和BMP图像,并使用Tkinter GUI显示它们。PNG图像显示正确,没有任何问题,但是,当使用Pillow的BmpImagePlugin.py时,我遇到了一些BMP图像的IOError (“不支持的BMP压缩”)。
使用位图插件的source和一些打印语句,我发现异常抛出在第193行,并且导致异常的图像是使用RLE8 (由第63行的字典表示)压缩的;所有其他的图像都可以工作,因为它们是原始格式。在我看来,如果字典中列出了一种压缩类型,就应该支持它,但显然情况并非如此。
我的问题是:有没有人知道Pillow或其他python库中可以打开RLE8位图图像的变通方法?下面的图像显示了我的PATH环境,以及下面注释中描述的命令行错误。
路径问题
发布于 2018-10-23 03:44:38
我注意到您的第一个图像(test1.bmp
)似乎已损坏,并且ImageMagick报告它的长度不正确。
您的第二个图像似乎不是使用RLE8压缩进行压缩的,而且也是一个调色板图像,但具有alpha/透明度。
您的第三个图像是带有RLE8压缩的非alpha调色板图像。
我的PIL版本只能读取第二个文件-第一个和第三个文件是RLE编码的,不能读取。
您要求的解决方法-我可以推荐pyvips
,它可以毫无问题地读取文件:
import pyvips
from PIL import Image
# Load troublesome file using vips, and write to a memory buffer
image = pyvips.Image.new_from_file('test1.bmp')
mem_img = image.write_to_memory()
# Read from memory buffer into Numpy array
imgnp=np.frombuffer(mem_img, dtype=np.uint8).reshape(image.height, image.width, 3)
# Convert Numpy array to PIL Image and write to disk
Image.fromarray(imgnp).save('result.png')
https://stackoverflow.com/questions/52619276
复制相似问题