1

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

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

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

编辑:

路径问题

第二次编辑

4

1 回答 1

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')
于 2018-10-22T19:44:38.013 回答