2012-05-17 14 views
9

Tengo dos imágenes que son exactamente las mismas dimensiones, lo único que intento hacer es tomar una, hacerla transparente al 50% y colocarla una encima de la otra, como entonces:Superposición de dos imágenes del mismo tamaño en 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") 

Pero todo lo que obtengo es la superposición transparente del 50% (¡hasta la mitad!).

+1

El bucle sobre el fondo para obtener un 0% de transparencia puede no ser necesario. – jdborg

Respuesta

10

Intente utilizar blend() lugar de pasta() - parece pegar() simplemente se cambia la imagen original con lo que estás pegando en

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

'Archivo" ./overlay.py ", línea 22, en geometry.blend (superposición) Archivo" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py ", línea 512, en __getattr__ aumento AttributeError (nombre) AttributeError: mezcla ' – jdborg

+0

voy a tratar de actualizar – jdborg

+0

estoy en 1.1.7, que es la última – jdborg

0

proporcionan el parámetro de máscara de superposición alfa y ver si esto produce resultados. que esperaba:

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

El segundo parámetro debe ser (0,0) –

3

Tal vez demasiado vieja pregunta, se puede hacer con facilidad usando opencv

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

Documentation link

Cuestiones relacionadas