2012-05-17 62 views
9

Tôi có hai hình ảnh chính xác cùng kích thước, tất cả những gì tôi đang cố gắng thực hiện là lấy một, làm cho nó trong suốt 50% và đặt nó trực tiếp trên đầu trang khác, như như vậy:Lớp phủ hai hình ảnh có kích thước giống nhau trong 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") 

Nhưng tất cả những gì tôi nhận được là lớp phủ trong suốt 50% (do đó, một nửa ở đó!).

+1

Vòng lặp trên nền để có độ trong suốt 0% có thể không cần thiết. – jdborg

Trả lời

10

Hãy thử sử dụng blend() thay vì dán() - có vẻ như dán() chỉ thay thế hình ảnh ban đầu với những gì bạn đang dán vào

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

'Tệp" ./overlay.py ", dòng 22, trong geometry.blend (lớp phủ) Tệp" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py ", dòng 512, trong __getattr__ tăng AttributeError (tên) AttributeError: sự pha trộn ' – jdborg

+0

tôi sẽ cố gắng cập nhật – jdborg

+0

tôi đang trên 1.1.7 là mới nhất – jdborg

0

Cung cấp các thông số mặt nạ che phủ alpha và xem nếu điều này mang lại kết quả. bạn mong đợi:

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

Tham số thứ hai phải là (0,0) –

3

câu hỏi có lẽ quá cũ, có thể được thực hiện một cách dễ dàng sử dụng opencv

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

Documentation link

Các vấn đề liên quan