【问题标题】:RLE8 image support/decompression with Pillow (PIL fork)RLE8 图像支持/使用 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

标签: python bitmap python-imaging-library vips


【解决方案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 位。
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2019-05-07
  • 2018-05-29
相关资源
最近更新 更多