2017-02-13 14 views
0

Я пытаюсь сделать снимок экрана и вставить курсор над ним, но когда я запускаю свою программу, результат заключается в том, что курсор был вставлен с большим черным фоном, кто-нибудь знает, как я может ли исчезнуть черный фон?Вставка изображения без черного фона, добавленного с помощью python

Это мой код:

from PIL import Image 

im = Image.open("screenShot.png") 
mouse = Image.open(r"C:\Windows\Cursors\aero_arrow.cur") 
im.paste(mouse, (40,40)) #Drawing the cursor 
im.save("newImage.png") 

ответ

0

Вы должны указать маску, так что черная часть не отображается. Смотрите docs:

im.paste(image, box, mask)

Same as above, but updates only the regions indicated by the mask. You can use either “1”, “L” or “RGBA” images (in the latter case, the alpha band is used as mask). Where the mask is 255, the given image is copied as is. Where the mask is 0, the current value is preserved. Intermediate values can be used for transparency effects.

Note that if you paste an “RGBA” image, the alpha band is ignored. You can work around this by using the same image as both source image and mask.

Это последняя часть должна быть вашей ситуации.

Так что в вашем случае вы можете использовать im.paste(mouse, (40,40), mouse) при условии, что этот образ уже имеет альфа-канал

Edit:

Видимо проблема связана с форматом .cur. Если вы введете mouse.getbands(), он вернется (R, G, B), следовательно ValueError. Вы можете преобразовать .cur файл в .png с альфа-каналом, однако я также получил следующие работы:

mouse_mask = mouse.convert("L") 
im.paste(mouse, (40,40), mouse_mask) 
+0

Я попытался это раньше, но получил сообщение об ошибке в 'ValueError: плохая прозрачность mask' –

+0

@EyalS Хорошо, я отредактировал свой ответ. Это работает? –

+0

да, спасибо! –