Мммм ... ваши результирующие изображения идентичны вашим изображениям на переднем плане, потому что, хотя изображения на переднем плане имеют слой альфа / прозрачности, они полностью непрозрачны и полностью скрывают фон.Вам нужно переосмыслить!
Вы можете использовать ImageMagick в Терминале для проверки ваших изображений.Итак, давайте посмотрим на ваше изображение переднего плана:
identify -verbose fg.png
Пример вывода
Image: fg.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 118x128+0+0
Units: Undefined
Colorspace: sRGB
Type: PaletteAlpha <--- Image does have alpha/transparency layer
Base type: Undefined
Endianess: Undefined
Depth: 8-bit
Channel depth:
Red: 8-bit
Green: 8-bit
Blue: 8-bit
Alpha: 1-bit
Channel statistics:
Pixels: 15104
Red:
min: 30 (0.117647)
...
...
Alpha:
min: 255 (1) <--- ... but alpha layer is fully opaque
max: 255 (1)
mean: 255 (1)
standard deviation: 0 (0)
kurtosis: 8.192e+51
skewness: 1e+36
entropy: 0
Так что нет смысла вставлять полностью непрозрачное изображение поверх фона, так как онобудет полностью скрывать его.
Если мы пробьем прозрачное отверстие на вашем переднем изображении с помощью ImageMagick :
convert fg.png -region 100x100+9+14 -alpha transparent fg.png
Теперь это выглядит так:
И если мы затем запустим ваш код:
#!/usr/local/bin/python3
from PIL import Image
background = Image.open('bg.png')
foreground = Image.open('fg.png')
background.paste(foreground, (0, 0), foreground)
background.save('result.png')
Это работает:
Итак, мораль этой истории в том, что вашему изображению на переднем плане либо нужна некоторая прозрачность, чтобы фон просвечивал, либо вам нужно использовать какой-либо режим смешивания, чтобы выбрать одно или другое из переднего и фонового изображенийв каждом месте, или выбрать некоторую комбинацию - например, среднее из двух или более светлое из двух.
Если вы хотите усреднить два изображения, или на самом деле, сделать любое другое смешиваниережиме, вы могли бы рассмотреть использование модуля ImageChops
Подушки - документация здесь .Таким образом, среднее значение будет выглядеть так:
#!/usr/local/bin/python3
from PIL import Image, ImageChops
bg = Image.open('bg.png')
fg = Image.open('fg.png')
# Average the two images, i.e. add and divide by 2
result = ImageChops.add(bg, fg, scale=2.0)
result.save('result.png')