색상 채널과 비트 깊이
실습 준비
from PIL import Image
img = Image.open("balloon.webp")
img
색상과 채널
컬러 비트맵의 각 픽셀은 여러 채널(channel)의 값으로 구성. 화면에서는 빛의 삼원색인 빨강(R), 초록(G), 파랑(B)을 조합한 RGB 방식이 일반적.


| 모드 | 구성 | 용도 |
|---|---|---|
1 | 1비트 흑백 | 흑백 문서와 이진 마스크 |
L | 8비트 밝기 1채널 | 그레이스케일 이미지 |
RGB | 8비트 RGB 3채널 | 화면 표시와 일반 컬러 이미지 |
RGBA | 8비트 RGB와 알파 4채널 | 투명도가 있는 컬러 이미지 |
CMYK | 8비트 CMYK 4채널 | 인쇄 |
P | 8비트 색상표 인덱스 | 팔레트 기반 PNG와 GIF |
Pillow의 convert()로 색상 모드를 변환.
그레이스케일로 변환:
gray = img.convert("L")
gray.mode
실행 결과
'L'
RGBA로 변환:
rgba = img.convert("RGBA")
rgba.mode
실행 결과
'RGBA'
비트 깊이와 픽셀 값
비트 깊이(bit depth)는 한 채널의 값을 표현하는 비트 수.
- 8비트 채널: 단계
uint8의 값 범위: 0–255L: 0은 검정, 255는 흰색RGB: 픽셀마다 8비트 채널 3개를 사용하므로 일반적으로 24비트RGBA: RGB와 8비트 알파 채널을 사용하므로 일반적으로 32비트
예를 들어 RGB 픽셀 (255, 0, 0)은 빨강, (255, 255, 255)는 흰색.
알파 채널과 투명도
RGBA의 A는 투명도를 나타내는 알파(alpha) 채널.
- 0: 완전히 투명
- 255: 완전히 불투명
- 중간값: 반투명
semi_transparent = img.convert("RGBA")
semi_transparent.putalpha(128)
semi_transparent.save("balloon_alpha.png")
semi_transparent
putalpha(128)은 모든 픽셀의 알파를 128로 지정. 8비트 알파 범위의 중간값이므로 이미지 전체가 약 50% 불투명.
JPEG는 알파 채널 저장 불가. 투명도가 필요하면 PNG나 알파 채널을 지원하는 WebP 형식을 사용.