2012-05-17 6 views
9

Mam dwa obrazy, które są dokładnie takie same wymiary, wszystko staram się zrobić, to mieć jedną, sprawiają, że 50% przezroczyste i umieścić go bezpośrednio na drugim, jak więc:Nakładka dwa takie same wielkości obrazków w Pythonie

import Image 

background = Image.open("bg.png") 
overlay = Image.open("over.png") 

background = background.convert("RGBA") 
overlay = overlay.convert("RGBA") 

background_pixels = background.load() 
overlay_pixels = overlay.load() 

for y in xrange(overlay.size[1]): 
    for x in xrange(overlay.size[0]): 
     background_pixels[x,y] = (background_pixels[x,y][0], background_pixels[x,y][1], background_pixels[x,y][2], 255) 

for y in xrange(overlay.size[1]): 
    for x in xrange(overlay.size[0]): 
     overlay_pixels[x,y] = (overlay_pixels[x,y][0], overlay_pixels[x,y][1], overlay_pixels[x,y][2], 128) 

background.paste(overlay) 
background.save("new.png","PNG") 

Ale dostaję tylko 50% przezroczystą nakładkę (tak w połowie!).

+1

Pętla na tle, aby uzyskać przezroczystość 0%, może nie być konieczna. – jdborg

Odpowiedz

10

Spróbuj użyć blend() zamiast pasty() - wydaje pasta() po prostu zastępuje oryginalny obraz z czego wklejając w

import Image 

background = Image.open("bg.png") 
overlay = Image.open("ol.jpg") 

background = background.convert("RGBA") 
overlay = overlay.convert("RGBA") 

new_img = Image.blend(background, overlay, 0.5) 
new_img.save("new.png","PNG") 
+0

'Plik" ./overlay.py ", wiersz 22, w geometry.blend (nakładka) Plik" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py ”linia 512, w __getattr__ podbicie AttributeError (nazwa) AttributeError: mieszanka ' – jdborg

+0

postaram aktualizowania – jdborg

+0

jestem na 1.1.7, który jest najnowszym – jdborg

0

podać parametr nakładka maski alfa i zobaczyć, czy to przynosi efekty. oczekiwano:

background.paste(overlay, overlay.size, overlay) 
+1

Drugi parametr powinien być (0,0) –

3

może zbyt stare pytanie, można zrobić z łatwością za pomocą opencv

cv2.addWeighted(img1, alpha, img2, beta, gamma) 
#setting alpha=1, beta=1, gamma=0 gives direct overlay of two images 

Documentation link