Как создать изображение с альфа-каналом поверх другого изображения (RGB, без альфа-канала)?Использование Python PIL - PullRequest
0 голосов
/ 18 января 2019

Мой вопрос похож на этот: Как с помощью библиотеки изображений Python (PIL) можно создать изображение с альфа-каналом поверх другого изображения? У меня есть два изображения, верхнее изображение с альфа-каналами и нижнее без. Я хочу поместить верхнее изображение поверх нижнего, в результате чего получается новое изображение, как если бы они были отображены в слоях. Я хотел бы сделать это с помощью Python PIL. Любое предложение будет заметно, спасибо!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Я решил свою проблему самостоятельно, проблема в том, что значение альфа-канала в изображении RGBA равно 0 или 255, я просто изменяю 255 на 220, чтобы верхнее изображение не покрывало нижнее изображение. Мой код выглядит следующим образом:

def transPNG(srcImageName, dstImageName):
img = Image.open(srcImageName)
img = img.convert("RGBA")
datas = img.getdata()
newData = list()
for item in datas:
    if item[0] > 200 and item[1] > 200 and item[2] > 200:
        newData.append(( 255, 255, 255, 0))
    else:
        newData.append((item[0], item[1], item[2], randint(220, 220)))
img.putdata(newData)
img.save(dstImageName,"PNG")
0 голосов
/ 18 января 2019

Просто расширите свое изображение RGB до RGBA, установив для A значение "1":

rgba = np.dstack((rgb, np.ones(rgb.shape[:-1])))

, а затем используйте метод композиции, который вы упомянули.

Если вы используете Подушка вместо этого вы можете просто использовать:

imRGB.putalpha(alpha)
composite = PIL.Image.alpha_composite(imRGB, im2RGBA)
...