RLE8 图像支持/使用 Pillow 解压(PIL fork)

Posted

技术标签:

【中文标题】RLE8 图像支持/使用 Pillow 解压(PIL fork)【英文标题】:RLE8 image support/decompression with Pillow (PIL fork) 【发布时间】:2018-10-03 03:25:15 【问题描述】:

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

路径问题

【问题讨论】:

你身边有“不开心” RLE8 图像可以分享以供测试吗? 这似乎是 PNG 而不是 BMP。 抱歉,托管网站转换了它。这个应该可以filedropper.com/test_1995 那个链接好像也失效了。 对不起那个标记;该网站决定删除我的图像。我创建了一个 GitHub 问题,该问题在底部的 zip 文件中包含三个图像。 github.com/python-pillow/Pillow/issues/3425 【参考方案1】:

我注意到您的第一张图片 (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')

【讨论】:

哦,没问题,只是一件小事。感谢您提及 pyvips! @jcupitt :是否可以以编程方式安装 pyvips(如我对问题的评论中所述)? 嗨,当然,从例如下载 libvips zipfile。 github.com/libvips/libvips/releases/download/v8.7.0/… 然后解压缩,将 vips-x.y.z/bin 目录添加到 %PATH%,运行 pip install pyvips 并启动 Python。 我根据您发布的here 的说明卸载并重新安装了所有组件,并在命令行中运行vips 得到与this 个人相同的结果,但随后尝试运行@987654332 @导致错误,最后一行显示cannot load library 'C:\vips-dev-8.7\vips-dev-8.7\bin\libgobject-2.0-0.dll': error 0xc1,有什么建议吗?我尝试将 C:\vips-dev-8.7\vips-dev-8.7\bin 重新排序到路径变量的顶部,但没有成功。 是的,我同意马克的观点,我认为你有一个 32 位的 Python。官方 libvips 二进制文件需要 64 位。

以上是关于RLE8 图像支持/使用 Pillow 解压(PIL fork)的主要内容,如果未能解决你的问题,请参考以下文章

图像处理模块pillow

图像处理标准库pillow

Pillow图像颜色处理的具体使用

Pillow处理图像模块

Pillow

Pillow