2017-05-02 1 views
1

기본 이미지가 있으며 그 위에 50 % 알파가있는 검은 색 스트립을 붙여 넣으려고합니다. 다음은 내가 테스트 한 내용입니다.이미지의 알파 값 설정 (PIL/베개를 통해)

from PIL import Image, ImageFont, ImageDraw 

base_width, base_height = base_img.size 
if base_img.mode != 'RGB': 
    base_img = base_img.convert("RGB") 
black_strip = Image.new('RGBA', (base_width, 20),(0,0,0,128)) #creating the black strip 
offset = (0,base_height/2) 
base_img.paste(background,offset) 

검정색 스트립에는 알파 투명도가 없습니다. 그것은 전적으로 단단합니다. 예 :

enter image description here

은 누군가가 나이를 향상시킬 수 있습니다

?

답변

2

눈치 챘을 때 Image.paste은 붙여 넣은 이미지의 알파 채널을 무시합니다. 그러나 선택적인 mask 매개 변수를 사용합니다. 이 알파 채널을 추출, 입력으로 RGBA 이미지를 받아들이는, 그래서 당신은 다시 붙여 넣은 이미지를 전달 할 수 있어야한다 :

base_img.paste(black_strip, offset, black_strip) 

를 이것은 또한 원래의 이미지를하지 않았다 경우 쉽게 마스크를 생성 할 수 있습니다 하나있어. 예를 들어, 다음은 RGB 이미지를 붙여 있지만의 흑색 영역을 투명하게한다 :

mask = rgb_img.point(lambda i: min(i * 25, 255)). 
base_img.paste(rgb_img, offset, mask) 

PS 상기 기본 이미지는 알파 채널이 없다면 상기 통보에만 작동 (그 모드는 RGB가 아니었다 RGBA). 그렇지 않은 경우에는 Image.alpha_composite을 사용하여 이미지를 결합해야합니다. 기본 이미지와 동일한 크기가되도록 붙여 넣기해야합니다.

+0

감사합니다. 이미지 프로세싱을 처음 접했을 때, 이미지 마스킹을 사용하는 방법에 대해 약간의 빛을 발산 할 수 있는지 궁금합니다. –

+1

마스크는 알파 채널에 대한 베개 용어입니다. 각 픽셀의 값은 투명도를 나타냅니다. 두 이미지를 결합하여 만들려면 (예에서와 같이) 이미 하나의 알파 채널을 사용하거나 자신의 마스크를 만들 수 있습니다. –