CodeGym /행동 /Python SELF KO /포맷 관리 및 변환

포맷 관리 및 변환

Python SELF KO
레벨 46 , 레슨 2
사용 가능

1. 이미지 포맷 확인

지원되는 이미지 포맷

Pillow는 다양한 이미지 포맷을 지원하며, 그 중에는 다음이 포함돼요:

  • JPEG (JPG): 사진에서 가장 인기 있는 포맷 중 하나예요. 품질 손실과 함께 이미지를 압축하므로 파일 크기를 크게 줄여줘요. 투명도는 지원하지 않아요.
  • PNG: 손실 없는 포맷이며, 투명도(알파 채널)를 지원해요. 로고, 아이콘, 명확한 이미지를 저장하기에 적합해요.
  • BMP: 고화질 비압축 포맷이지만, 파일 크기가 커요. 투명도를 지원해요.
  • TIFF: 손실 없이 이미지를 저장하는 데 적합해요. 주로 인쇄에 많이 사용돼요.
  • WEBP: 최신 포맷으로 높은 압축률과 투명도 지원을 제공해요. 웹 이미지를 위한 완벽한 선택으로 작은 파일 크기와 좋은 품질을 보장해요.

변환을 위한 이미지 불러오기

이미지를 변환하기 전에 먼저 Image.open() 메서드를 사용하여 이미지를 불러와야 해요.

Python

from PIL import Image

# 이미지 열기
image = Image.open("example.jpg")
print(image.format)  # 이미지의 원본 포맷 확인

2. 이미지 포맷 변환

save() 메서드는 파일 이름의 확장자를 변경하거나 명시적으로 포맷을 지정하여 다양한 포맷으로 이미지를 저장할 수 있어요.

JPEG를 PNG로 변환

JPEG 이미지를 PNG로 변환하려면 저장 시 새로운 확장자를 설정하면 돼요:

Python

# PNG 포맷으로 이미지 저장
image.save("example_converted.png")

이 코드는 JPEG 이미지를 PNG 포맷으로 변환하고 지정된 이름으로 저장해요. PNG는 손실되지 않은 이미지를 저장하는 데 적합하며, 투명한 영역도 지원해요.

PNG를 JPEG로 변환

PNG 이미지를 JPEG로 변환할 수도 있어요. 하지만 JPEG가 투명성을 지원하지 않으므로 투명한 영역은 흰 배경으로 대체돼요.

Python

# PNG를 JPEG로 변환 (투명 영역이 흰 배경으로 대체됨)
image = image.convert("RGB")  # JPEG에 필요한 RGB 모드로 전환
image.save("example_converted.jpg", "JPEG")

convert("RGB") 메서드는 JPEG 저장을 위해 RGB 모드로 이미지를 변환하는 데 사용돼요. 이는 JPEG가 투명 영역을 지원하지 않기 때문에 필수적이에요.

3. 이미지 품질 관리

Pillow는 qualityoptimize 매개변수를 제공하여 파일 크기와 품질을 제어할 수 있어요. 이것은 특히 JPEG와 PNG에 유용해요.

JPEG 품질 관리 및 최적화

JPEG 포맷으로 저장할 때 quality 매개변수는 압축 정도를 조정해요. 품질 값이 높을수록 파일 크기도 커지고 이미지 품질도 좋아져요. quality 값은 1에서 95까지 (기본값은 75) 설정 가능해요.

Python

# 품질을 낮춰서 JPEG 이미지 저장
image.save("example_compressed.jpg", "JPEG", quality=85)

이 코드는 품질 85로 이미지를 저장하여 파일 크기를 줄이면서도 적절한 품질을 유지해요. 더 낮은 품질을 원한다면, 예를 들어 썸네일을 생성하기 위해 quality = 50으로 설정할 수 있어요.

PNG 최적화

PNG에서는 optimize = True 매개변수가 중복 데이터를 제거하여 손실 없이 압축을 수행해요. 인터넷에서 이미지를 게시할 때 특히 유용해요.

Python

# 최적화된 PNG 저장
image.save("example_optimized.png", "PNG", optimize=True)

PNG 최적화는 파일 크기를 줄여 품질을 유지하는 데 효과적이에요. 특히 로고와 아이콘처럼 작은 크기의 파일에서 중요해요.

압축 수준에 따른 JPEG 품질 비교

quality 매개변수를 변경하면 파일 크기와 이미지 품질에 어떻게 영향을 미치는지 알아봐요.

Python

# 다른 품질 수준으로 JPEG 이미지 저장
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)

이 예제에서는 동일한 이미지를 품질 95, 75, 50으로 저장해요. 품질 95는 원본과 거의 구별할 수 없으며 공간을 더 많이 차지하지만, 품질 50은 압축률이 높아 세부 사항의 손실이 눈에 띌 수 있어요.

4. WebP 포맷 사용

WebP 포맷은 손실 및 비손실 압축, 투명성을 모두 지원하는 최신 포맷이에요. 높은 압축률 덕분에 인터넷에서 널리 사용돼요.

WebP 포맷으로 이미지 변환

Python

# 이미지를 WebP로 변환
image.save("example.webp", "WEBP", quality=80)

이 예제에서는 품질 80으로 이미지를 WebP 포맷으로 저장해요. WebP는 JPEG 또는 PNG와 비슷한 품질로 훨씬 작은 파일 크기를 제공해요.

최적화를 사용한 전체 변환 예제

이제 배운 모든 방법을 결합하여 여러 포맷으로 변환하는 스크립트를 만들어봐요.

Python

from PIL import Image

# 이미지 열기
image = Image.open("example.jpg")

# 최적화된 PNG로 변환
image.save("converted_optimized.png", "PNG", optimize=True)

# 품질 감소된 JPEG로 저장
image_rgb = image.convert("RGB")  # JPEG용 RGB 모드로 전환
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)

# 품질 최적화된 WebP로 변환
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)

이 예제에서는:

  • 손실 없는 PNG 최적화를 통해 파일 크기를 줄여요.
  • 품질 85로 JPEG로 저장하여 파일 크기를 줄이면서도 양호한 품질을 유지해요.
  • 인터넷 게시에 적합한 WebP 포맷으로 변환하여 높은 품질과 작은 파일 크기를 제공합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION