Python PIL полностью удаляет каждый альфа-канал - PullRequest
1 голос
/ 29 июня 2019

Я так старался плавно преобразовать PNG в растровое изображение, но каждый раз терпел неудачу.

но теперь я думаю, что мог бы найти причину. это из-за альфа-каналов. («перышко» в фотошопе)

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

enter image description here

Вывод, который я ожидал:

enter image description here

Токовый выход:

enter image description here

Я хочу преобразовать его в 8-битное растровое изображение и закрасить все невидимые (альфа) пиксели в фиолетовый (# FF00FF) и установить их в ноль. (самая первая палитра)

но, очевидно, фоновая область и невидимая область вокруг фактического изображения имеют разные цвета. Я хочу, чтобы все они были такими же, как фон. что мне делать?

я пробовал эти три

image = Image.open(file).convert('RGB')


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


image = Image.open('feather.png')
result = image.quantize(colors=256, method=2)

третий метод выглядит лучше, но он становится таким же, когда я сохраняю его как растровое изображение.

Я просто хочу покончить с этим сейчас. Я потратил слишком много времени на это.

output with background removed

если я удаляю фон из выходного файла, это все еще выглядит неловко.

1 Ответ

0 голосов
/ 29 июня 2019

Ваш вопрос вводит в заблуждение, поскольку Вы заявили: -

Я хочу преобразовать его в 8-битное растровое изображение и закрасить все невидимые (альфа) пиксели в фиолетовый (# FF00FF) и установить их в ноль. (самая первая палитра)

Но в описании вы дали входное изображение без альфа-канала. К счастью, я видел ваш предыдущий вопрос Преобразование PNG в 8-битное растровое изображение , поэтому я получил изображение, содержащее альфа (которое вы упомянули в описании), но не опубликовал.

ЗДЕСЬ ИЗОБРАЖЕНИЕ С АЛЬФАЙ: -

enter image description here

Теперь мы должны получить .bmp эквивалент этого изображения в режиме P.

from PIL import Image

image = Image.open(r"Image_loc")

new_img = Image.new("RGB", (image.size[0],image.size[1]), (255, 0, 255))

cmp_img = Image.composite(image, new_img, image).quantize(colors=256, method=2)

cmp_img.save("Destination_path.bmp")

ИЗОБРАЖЕНИЕ ВЫХОДА: -

enter image description here

...