我在Python3上使用Pillow(版本5.2.0)打开PNG和BMP图像,并使用Tkinter GUI显示它们。 PNG图像可以正确显示,没有任何问题,但是,当使用Pillow的BmpImagePlugin.py时,一些BMP图像遇到IOError(“不支持的BMP压缩”)。
使用位图插件的source和一些打印语句,我发现在第193行引发了异常,并且使用RLE8压缩了导致异常的图像(由第63行的字典表示);所有其他作品都可以使用,因为它们是RAW格式。 在我看来,如果在该词典中列出了压缩类型,则应支持该压缩类型,但显然并非如此。
我的问题:是否有人知道Pillow中的解决方法或任何其他可以打开RLE8位图图像的python库? 这是一张显示我的PATH环境的图像,以及下面的注释中描述的命令行错误。
路径问题
答案 0 :(得分:1)
我注意到您的第一张图像(test1.bmp
)似乎已损坏,并且 ImageMagick 报告长度不正确。
您的第二张图像似乎未使用RLE8压缩进行压缩,并且也是已淡化的图像,但是具有alpha /透明度。
您的第三个图像是经过码垛处理的非alpha图像,具有RLE8压缩。
我的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')