RLE8 图片 support/decompression with Pillow (PIL fork)

RLE8 image support/decompression with Pillow (PIL fork)

我在 Python3 上使用 Pillow(5.2.0 版)打开 PNG 和 BMP 图像,并使用 Tkinter GUI 显示它们。 PNG 图像正确显示没有问题,但是,当使用 Pillow 的 BmpImagePlugin.py 时,我遇到了一些 BMP 图像的 IOError ("Unsupported BMP compression")。

使用位图插件的source和一些打印语句,我发现在第193行抛出异常,并且导致异常的图像使用RLE8压缩(由第63行的字典表示) ;所有其他的都可以工作,因为它们是 RAW 格式。 在我看来,如果该字典中列出了压缩类型,则应该支持它,但显然情况并非如此。

我的问题:有人知道 Pillow 或任何其他可以打开 RLE8 位图图像的 python 库的解决方法吗? 这是显示我的 PATH 环境的图像,以及下面评论中描述的命令行错误。

路径问题

我注意到您的第一张图片 (test1.bmp) 似乎已损坏并且 ImageMagick 报告其长度不正确。

您的第二张图片似乎没有使用 RLE8 压缩,并且也是调色图像,但 alpha/transparency。

你的第三张图片是托盘化的,非 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')