Подушка конвертирует png в 8-битное растровое изображение

Я попытался преобразовать 8-битные PNG в 8-битные (256-индексированная палитра) растровое изображение, но Pillow продолжает рвать дерьмовый результат.

это то, что я пробовал.

image = Image.open(file)
image = image.convert('P')
pp = image.getpalette()
pp[0] = 255
pp[1] = 0
pp[2] = 255
image.putpalette(pp)

or

image = Image.open(file)
image = image.convert('P')
image.save(blabla.bmp)

и это результат того, что я ожидал увидеть. это фактическое растровое изображение (сделанное Photoshop.) Photoshop, и это то, что сделала Pillow : Подушка что это за шутка ?! и он даже обрезался, что мне делать, чтобы правильно его преобразовать?

Исходное изображение:

введите здесь описание изображения


person Bora    schedule 28.06.2019    source источник
comment
не могли бы вы опубликовать исходное изображение, чтобы мы могли провести с ним тесты?   -  person Vasu Deo.S    schedule 28.06.2019
comment
Хорошо, спасибо :) i.stack.imgur.com/G0g5q.png   -  person Bora    schedule 28.06.2019


Ответы (1)


Сделать это можно так:

from PIL import Image

# Open image
image = Image.open('feather.png')

# Quantize to 256 colours using fast octree method
result = image.quantize(colors=256, method=2)

введите здесь описание изображения

person Mark Setchell    schedule 28.06.2019
comment
@MarkSetchell Отличный ответ (+1) Кстати, не могли бы вы объяснить мне, как Image.quantize() работает иначе, чем преобразование изображения в режим P через convert("P"). Во-вторых, что делает в этом коде быстрый метод октодерева? Я запустил ваш код без аргумента method = 2 в quantize() и получил те же результаты. - person Vasu Deo.S; 28.06.2019
comment
@ VasuDeo.S Привет, Васу, извини, у меня нет контактов с авторами PIL, и я не понимаю, почему они решили делать что-то конкретным образом. У меня просто есть некоторый опыт использования PIL / Pillow, и именно так я научился получать наилучшие результаты. - person Mark Setchell; 28.06.2019
comment
Я проверил ваш метод сейчас, и он работает только в PNG, но то же самое происходит, когда я пытаюсь сохранить как растровое изображение типа P. - person Bora; 29.06.2019
comment
Я думаю, это из-за альфа-каналов. альфа-каналы не удаляются плавно .. - person Bora; 29.06.2019