1. 준비
합치기 위한 이미지 로드
여러 이미지를 작업하기 전에 이미지를 로드해야 해. Pillow는 JPEG, PNG, BMP, GIF 같은 대부분의 인기 이미지 형식을 지원해.
from PIL import Image
# 이미지 로드하기
background = Image.open("background.jpg")
foreground = Image.open("foreground.png")
여기서 우리는 배경 이미지와 오버레이 이미지 두 개를 로드했어. 몇몇 메소드의 경우에는 두 이미지가 동일한 크기를 가져야 한다는 걸 기억해야 해.
2. 이미지 오버레이
paste() 메소드
paste() 메소드는 하나의 이미지를 다른 이미지 위에 특정 좌표에서 삽입할 수 있어. 이 메소드는 콜라주 효과를 만들거나 하나의 이미지를 다른 이미지 위에 오버레이할 때 유용해.
# 배경 크기에 맞게 전경 크기 변경
foreground = foreground.resize(background.size)
# 배경 위에 이미지 오버레이
background.paste(foreground, (50, 50)) # (50, 50) 좌표에 foreground 삽입
# 결과 저장
background.save("pasted_image.jpg")
여기서 foreground 이미지는 background 위에 (50, 50) 위치에 삽입돼. 만약 전경이 배경의 경계를 초과하면, 일부가 잘릴 거야.
paste()에서 마스크 사용
paste() 메소드는 마스크를 지원해서 투명 영역을 유지하면서 이미지를 부분적으로 오버레이할 수 있어. 마스크는 L (회색조) 또는 RGBA 모드여야 해.
# 마스크 생성
mask = Image.open("mask.png").convert("L") # 마스크를 회색조로 변환
# 마스크를 사용한 이미지 삽입
background.paste(foreground, (50, 50), mask=mask)
background.save("pasted_with_mask.jpg")
mask.png 마스크는 foreground 이미지의 어떤 부분이 보여질지를 결정하고, 하나의 이미지를 다른 이미지 위에 부드럽게 오버레이할 수 있게 해.
3. 이미지 블렌딩
blend() 메소드
blend() 메소드는 두 이미지를 특정 투명도로 섞을 수 있어. 이 메소드는 새로운 이미지 객체를 생성하고, 두 원본 이미지를 혼합한 결과를 나타내. blend()를 사용하려면 두 이미지가 같은 크기여야 해.
단순 이미지 블렌딩
# 동일한 크기로 이미지 크기 변경
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
# 투명도를 설정하여 이미지 블렌딩
blended_image = Image.blend(background, foreground, alpha=0.5)
# 결과 저장
blended_image.save("blended_image.jpg")
alpha 파라미터는 foreground 이미지의 투명도를 결정해. alpha = 0.5면 이미지가 균등하게 섞여. alpha = 0.0면 foreground 이미지는 완전히 투명하고 배경만 보이고, alpha = 1.0면 배경이 완전히 투명하고 전경만 보여.
4. 마스크를 사용한 이미지 합성
composite() 메소드
composite() 메소드는 마스크를 기반으로 두 이미지를 결합하여 어떤 이미지의 어떤 부분이 보일지를 결정해. 이 메소드는 복잡한 합성과 하나의 이미지를 다른 이미지 위에 정밀하게 오버레이할 때 매우 유용해.
composite()를 사용한 이미지 합성 예제
# 두 이미지와 마스크가 동일한 크기를 가지는지 확인
background = background.resize((500, 500))
foreground = foreground.resize((500, 500))
mask = mask.resize((500, 500))
# 마스크를 사용한 합성
composited_image = Image.composite(foreground, background, mask)
# 이미지 저장
composited_image.save("composited_image.jpg")
마스크는 최종 이미지에서 foreground와 background의 어떤 부분들이 보일지를 정의해. 마스크의 흰색 영역은 foreground를 보이게 하고, 검은색 영역은 background를 보이게 해.
5. 예제
paste(), blend(), composite() 메소드를 혼합 사용한 예제
이제 더 복잡한 합성을 만들기 위해 이 메소드를 통합해 보자. 배경, 반투명 이미지를 가진 전경, 그리고 마스크가 있다고 가정해 보자.
from PIL import Image
# 이미지 로드
background = Image.open("background.jpg").resize((500, 500))
foreground = Image.open("foreground.png").resize((500, 500))
mask = Image.open("mask.png").convert("L").resize((500, 500))
# 1. 배경과 전경을 반투명하게 블렌딩
blended_image = Image.blend(background, foreground, alpha=0.3)
# 2. 마스크를 사용해서 최종 이미지에 오버레이
final_composite = Image.composite(foreground, blended_image, mask)
# 최종 결과 저장
final_composite.save("final_composition.jpg")
이 예제는 blend()와 composite()를 순서대로 적용하여 다층합성을 만드는 방법을 보여줘.
이미지 결합 메소드의 실제 적용
- 콜라주 만들기:
paste()메소드는 여러 이미지를 하나의 캔버스에 추가하여 콜라주와 모자이크를 만들 수 있어. - 오버레이와 투명도 효과:
blend()메소드는 사진 편집 및 효과를 만들 때 유용한 부드러운 전환을 만들어 줘. - 마스크를 이용한 합성:
composite()메소드는 이미지의 어떤 부분이 보일지 정확하게 제어하여 복잡한 합성을 가능하게 해.
메소드 비교
| 메소드 | 설명 | 적용 |
|---|---|---|
paste() |
하나의 이미지를 다른 이미지 위에 오버레이 | 콜라주, 이미지의 특정 위치 배치 |
blend() |
특정 투명도로 두 이미지 섞기 | 부드러운 전환 및 오버레이 효과 |
composite() |
마스크를 기반으로 두 이미지 결합 | 정밀한 오버레이 및 복잡한 합성 |
GO TO FULL VERSION