Как решить проблему путальфы Python 3 PIL? - PullRequest
0 голосов
/ 17 апреля 2020

Я использую функцию putalpha для моего проекта. Но у меня есть проблема.

Когда я не использую putalpha: введите описание изображения здесь

Когда я использую putalpha:

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

Как решить эту проблему?

Код:

def add_logo(pos, size=5, rotation=0, alpha=255):
    mainim = Image.open("resim.png").convert("RGB")
    logoim = Image.open("pawpink.png").convert("RGBA")
    logoim = logoim.rotate(rotation, expand=1)

    logoim.putalpha(alpha)

    #Calculate size
    width, height = mainim.size
    width = width / size
    oran = (logoim.size[0] / logoim.size[1])
    height = (width * (oran ** -1))
    logoim = logoim.resize((int(width), int(height)))

    mainim.paste(logoim, box=pozisyon_getir_resim(pos), mask=logoim)
    return mainim

Изображения:

cat.png

lo go .png

1 Ответ

0 голосов
/ 17 апреля 2020

Я нашел эту отличную статью Водяной знак с PIL (Python рецепт) и смог заставить вашу программу работать.

Вот моя версия (полная, проверенная):

import PIL.Image
import PIL.ImageEnhance

def pozisyon_getir_resim(pos):
    return (pos, pos)

def reduce_opacity(im, opacity):
    """Returns an image with reduced opacity."""
    assert opacity >= 0 and opacity <= 1
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    else:
        im = im.copy()
    alpha = im.split()[3]
    alpha = PIL.ImageEnhance.Brightness(alpha).enhance(opacity)
    im.putalpha(alpha)
    return im

def add_logo(pos, size=5, rotation=0, alpha=255):
    mainim = PIL.Image.open("cat.png").convert("RGB")
    logoim = PIL.Image.open("logo.png").convert("RGBA")
    logoim = logoim.rotate(rotation, expand=1)

    logoim = reduce_opacity(logoim, alpha/255.0)

    # Calculate size
    width, height = mainim.size
    width = width / size
    oran = (logoim.size[0] / logoim.size[1])
    height = (width * (oran ** -1))
    logoim = logoim.resize((int(width), int(height)))

    if mainim.mode != 'RGBA':
        mainim.convert('RGBA')
    layer = PIL.Image.new('RGBA', mainim.size, (0, 0, 0, 0))
    layer.paste(logoim, pozisyon_getir_resim(pos))

    return PIL.Image.composite(layer, mainim, layer)


mainim = add_logo(32, 5, 0, 127)
mainim.save('cat_with_logo.png', 'PNG')

Результат: cat_with_logo.png

...