RLE8图像支持/带枕头减压(PIL前叉)

时间:2018-10-03 03:25:15

标签: python bitmap python-imaging-library vips

我在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环境的图像,以及下面的注释中描述的命令行错误。

Edit:

路径问题

2nd Edit

1 个答案:

答案 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')