Изображение не меняется при добавлении альфа-канала - PullRequest
3 голосов
/ 06 марта 2019

В пакете подушек есть метод, называемый Image.putalpha(), который используется для добавления или изменения альфа-канала изображения.

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

enter image description here

Это мой код для добавления альфы к нему

from PIL import Image

im_owl = Image.open("owl.jpg")

alpha = Image.new("L", im_owl.size, 50)
im_owl.putalpha(alpha)

im_owl.show()

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

Что могло быть не так?

Ответы [ 3 ]

2 голосов
/ 06 марта 2019

Попробуйте использовать

im_owl.save("alphadOwl.png")

, а затем просмотрите сохраненное изображение.Казалось бы, альфа-канал не применяется к файлам bmp или jpg.Это bmp-файл, который отображается с im.show()

(Кстати, я на Mac, не знаю, использует ли im.show() другие приложения на других устройствах).

2 голосов
/ 06 марта 2019

попробуйте сохранить изображение и увидеть его.Я также не могу видеть изображение непосредственно с

im_owl.show()

, но когда я его сохранил

im_owl.save()

, я вижу, что изображение изменилось.

1 голос
/ 08 марта 2019

Как отметили @sanyam и @Pam, мы можем сохранить преобразованное изображение, и оно отображается правильно. Это связано с тем, что в Windows изображения сохраняются как временные BMP-файлы, прежде чем они будут показаны с помощью системного средства просмотра изображений по умолчанию, согласно документации PIL :

Image.show(title=None, command=None)

    Displays this image. This method is mainly intended for debugging purposes.

    On Unix platforms, this method saves the image to a temporary PPM file, and calls
    either the xv utility or the display utility, depending on which one can be found.

    On macOS, this method saves the image to a temporary BMP file, and opens it with
    the native Preview application.

    On Windows, it saves the image to a temporary BMP file, and uses the standard BMP
    display utility to show it (usually Paint).

Чтобы исправить эту проблему, мы можем исправить код подушки, чтобы использовать формат PNG по умолчанию. Для начала нам нужно найти корень пакета Pillow:

import PIL
print(PIL.__path__)

В моей системе вывод:

[»D: \ Anaconda \ Lib \ сайт-пакеты \ PIL»]

Перейдите в этот каталог и откройте файл ImageShow.py. Я добавляю следующий код после строки register(WindowsViewer):

    class WindowsPNGViewer(Viewer):
        format = "PNG"

        def get_command(self, file, **options):
            return ('start "Pillow" /WAIT "%s" '
                    '&& ping -n 2 127.0.0.1 >NUL '
                    '&& del /f "%s"' % (file, file))

    register(WindowsPNGViewer, -1)

После этого я могу правильно отобразить изображение с альфа-каналом.

Ссылки

...