2012-12-01 2 views
3

동일한 크기의 두 PNG 이미지 (A & B)가 있고 두 번째 (B) 부분이 부분적으로 투명합니다. 내가 코드Python (PIL) : 투명한 이미지를 밝게하고 다른 이미지에 붙여 넣기

base.paste(overlay, mask=overlay) 

를 사용하여 이미지 A를로 이미지 B를 붙여 넣을 경우

나는 그들 중 거의 완벽한 조합을 얻을.

이미지 A에 붙여 넣기 전에 이미지 B를 밝게하고 싶습니다. Image.new ("L", size, 80)와 같은 마스크를 사용하여 이미지를 밝게 할 수 있지만 또한 이미지 (A)를 어둡게하고 수정해서는 안됩니다.

명령 행에서

, 나는 그런 ImageMagick과 함께 원하는 것을 할 수 있습니다

composite -dissolve 40 overlay.png base.png result.png 
내가 필요 정확히 무엇

,하지만 난 파이썬이 작업을 수행하는 방법에 대해 설명합니다.

답변

3

내 자신의 이해에서 디졸브 옵션은 알파 채널 만 수정합니다. 당신이 당신의 알파 채널이 값의 40 %를 유지하려는 경우 따라서, 당신은 PIL에서 동일한 작업을 수행 :이 코드에서

from PIL import Image 

overlay = Image.open('overlay.png') 
base = Image.open('base.png') 

bands = list(overlay.split()) 
if len(bands) == 4: 
    # Assuming alpha is the last band 
    bands[3] = bands[3].point(lambda x: x*0.4) 
overlay = Image.merge(overlay.mode, bands) 

base.paste(overlay, (0, 0), overlay) 
base.save('result.png') 

, 나는 여러 밴드에서 이미지를 분할합니다. 네 개가있는 경우 마지막 하나가 알파 채널을 나타내는 것으로 가정합니다. 따라서 값을 0.4 (40 %) 배증하고 기본 이미지 위에 붙여 넣을 새 이미지를 만듭니다.

+0

고맙습니다. 두 이미지를 "RGBA"로 변환해야하고 위에서 언급 한 imagemagick-command와 같은 결과를 얻습니다. 다시 한 번 감사드립니다! – t777

+0

붙여 넣기 방법의 첫 번째 인수로 원본 오버레이 이미지를 사용하고 수정 된 오버레이 이미지를 마스크로 사용하면 약간의 실험을 거쳤으며 최상의 결과를 얻었습니다. base.paste (overlay, mask = 마스크)' – t777