2012-05-17 10 views
9

Ich habe zwei Bilder, die genau die gleichen Dimensionen sind, alles was ich versuche zu tun ist, nehmen Sie einen, machen es 50% transparent und legen Sie es direkt über dem anderen, wie also:Overlay zwei gleichgroße Bilder 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") 

Aber alles, was ich bekomme, ist die 50% transparente Überlagerung (so halb da!).

+1

Die Schleife über dem Hintergrund, um 0% Transparenz zu erhalten, ist möglicherweise nicht erforderlich. – jdborg

Antwort

10

Versuchen blend() statt Paste() - es scheint, Paste(), um das Originalbild ersetzt nur mit, was Sie Einfügen 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

'Datei" ./overlay.py ", Zeile 22, in geometrie.blend (überlagern) Datei" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py “, Linie 512, in __getattr__ raise Attribute (name) Attribute: Mischung ' – jdborg

+0

ich werde versuchen, – jdborg

+0

Aktualisierung ich auf 1.1.7 bin, welche die neueste – jdborg

0

die Overlay-Alpha-Maske Parameter bereitstellen und sehen, ob diese Ergebnisse liefert.

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

Zweiter Parameter sollte (0,0) sein –

3

Vielleicht zu alt Frage kann mit Leichtigkeit mit opencv

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

Documentation link