首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RLE8图像支持/用枕头解压(PIL fork)

RLE8图像支持/用枕头解压(PIL fork)
EN

Stack Overflow用户
提问于 2018-10-03 11:25:15
回答 1查看 662关注 0票数 1

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

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

我的问题是:有没有人知道Pillow或其他python库中可以打开RLE8位图图像的变通方法?下面的图像显示了我的PATH环境,以及下面注释中描述的命令行错误。

路径问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:44:38

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

您的第二个图像似乎不是使用RLE8压缩进行压缩的,而且也是一个调色板图像,但具有alpha/透明度。

您的第三个图像是带有RLE8压缩的非alpha调色板图像。

我的PIL版本只能读取第二个文件-第一个和第三个文件是RLE编码的,不能读取。

您要求的解决方法-我可以推荐pyvips,它可以毫无问题地读取文件:

代码语言:javascript
复制
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')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52619276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档