2012-05-17 23 views
9

Ho due immagini che sono esattamente le stesse dimensioni, tutto quello che sto cercando di fare è prenderne una, renderla trasparente al 50% e posizionarla direttamente sopra l'altra, come so:Sovrappone due immagini della stessa dimensione in Python

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") 

Ma tutto quello che ottengo è la sovrapposizione trasparente al 50% (quindi a metà strada lì!).

+1

Il ciclo sullo sfondo per ottenere una trasparenza dello 0% potrebbe non essere necessario. – jdborg

risposta

10

Provate ad usare blend() al posto di pasta() - sembra pasta() sostituisce solo l'immagine originale con quello che stai incollando in

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

'File" ./overlay.py ", riga 22, in geometry.blend (overlay) File" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py ", la linea 512, in __getattr__ rilancio AttributeError (nome) AttributeError: miscela ' – jdborg

+0

cercherò di aggiornare – jdborg

+0

sono su 1.1.7, che è l'ultima – jdborg

0

Fornire il parametro della maschera di sovrapposizione alfa e vedere se questo produce risultati. vi aspettavate:

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

Il secondo parametro dovrebbe essere (0,0) –

3

Forse troppo vecchia questione, può essere fatto con facilità utilizzando opencv

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

Documentation link

Problemi correlati