Я отмечаю, что ваше первое изображение (test1.bmp
) кажется поврежденным, а ImageMagick сообщает, что оно имеет неправильную длину.
Ваше второе изображение, по-видимому, не сжато с помощью сжатия RLE8и также является изображением в палитре, но с альфа / прозрачностью.
Ваше третье изображение на паллетах, не альфа с сжатием 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')