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')
我在 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')