Python Pillow 완전 가이드 | 이미지 처리 기본부터 응용까지 상세 해설

目次

1. 시작

Python과 Pillow 개요

Python은 많은 프로그래머와 데이터 사이언티스트가 애용하는 프로그래밍 언어로, 간단한 문법과 다양한 라이브러리 덕분에 다양한 용도로 활용됩니다. 그 중에서도 이미지 처리에 특화된 Pillow(이전의 PIL: Python Imaging Library)는 Python의 대표적인 이미지 처리 라이브러리로 널리 사용됩니다. Pillow는 JPEG, PNG, GIF 등 다양한 이미지 포맷을 지원하며, 리사이즈, 트리밍, 필터링, 텍스트 추가 등 폭넓은 이미지 작업이 가능합니다. 많은 애플리케이션과 프로젝트에서 이미지 읽기, 저장, 편집이 필요할 때 활용됩니다.

이 글의 목적

이 글에서는 Python의 Pillow 라이브러리를 사용한 기본적인 이미지 처리부터 응용 작업까지를 철저히 설명합니다. 구체적으로는 이미지 읽기와 저장 같은 기본 작업부터 이미지 리사이즈와 회전, 필터 처리, 그리고 텍스트 그리기와 이미지 합성까지, 다양한 이미지 작업 방법을 소개합니다. 이를 읽음으로써 Pillow 사용법을 한 번에 마스터하고 실제 프로젝트에 활용할 수 있는 지식과 스킬을 얻을 수 있을 것입니다.

2. Pillow 설치 방법

2.1 Pillow를 Python 환경에 설치하는 방법

Pillow를 사용하려면 먼저 Python 환경에 라이브러리를 설치해야 합니다. 설치 방법은 매우 간단하며, 아래 명령을 터미널(Windows의 경우 명령 프롬프트)에 입력하기만 하면 완료됩니다.
pip install Pillow
pip은 Python 패키지를 관리하는 도구이며, 이 명령을 실행하면 Pillow 라이브러리가 자동으로 설치됩니다. 설치가 성공하면 이미지 조작이 가능해집니다.

2.2 동작 확인 방법

Pillow 설치가 완료되면 간단한 코드를 실행하여 정상적으로 동작하는지 확인해 봅시다. 아래 코드를 Python 스크립트 파일에 작성하고 실행해 보세요.
from PIL import Image

# Pillow 동작 확인용 코드
img = Image.new('RGB', (100, 100), color = 'red')
img.save('test_image.png')
이 코드는 100×100 픽셀의 빨간 이미지를 생성하고, “test_image.png”라는 이름으로 저장합니다. 이 이미지 파일이 정상적으로 생성되었다면 Pillow가 정상적으로 설치되어 동작하고 있음을 확인할 수 있습니다.

2.3 자주 발생하는 설치 문제와 해결책

가끔 Pillow 설치 중에 문제가 발생할 수 있습니다. 아래는 자주 발생하는 트러블과 그 해결책입니다.
  1. Python의 버전이 오래된 경우 Pillow는 Python 3.x 이상을 지원합니다. 오래된 버전의 Python을 사용하고 있다면 Pillow를 정상적으로 설치할 수 없을 수 있습니다. python --version을 사용해 버전을 확인하고, 필요에 따라 최신 버전으로 업데이트합시다.
  2. 의존 패키지 문제 Pillow를 설치할 때 필요한 의존 패키지가 부족한 경우가 있습니다. 이 경우 오류 메시지에 따라 부족한 패키지를 개별적으로 설치하거나, 아래와 같이 의존 패키지를 자동으로 설치하는 옵션을 추가할 수 있습니다.
   pip install Pillow --upgrade
  1. 환경 변수 설정 특히 Windows 환경에서 Pillow가 정상적으로 동작하지 않을 경우, Python 및 Pip의 경로가 환경 변수에 올바르게 설정되지 않은 것이 원인일 수 있습니다. 이를 확인하고 올바른 경로가 설정되어 있는지 확인합시다.

3. 이미지 읽기와 표시

3.1 Python으로 이미지 파일을 읽는 방법

이미지 읽기는 Pillow 라이브러리를 사용한 이미지 처리의 기본 단계입니다. 먼저, 지정한 파일을 읽는 방법을 소개합니다. Pillow에서는 Image.open() 메서드를 사용하여 이미지를 열 수 있습니다. 아래는 이미지를 읽기 위한 기본 코드입니다.
from PIL import Image

# 이미지 파일 읽기
img = Image.open('sample.jpg')

# 이미지 정보를 표시
print(img.format)  # 파일 형식(예: JPEG, PNG)
print(img.size)    # 크기(너비, 높이)
print(img.mode)    # 색 모드(예: RGB, L)
이 코드에서는 Image.open()을 사용하여 이미지 파일을 열고, 해당 이미지의 포맷, 크기, 색 모드 등의 정보를 가져옵니다. 파일 경로만 지정하면 쉽게 이미지를 읽을 수 있어 매우 편리합니다.

3.2 이미지를 표시하기

이미지를 읽은 후, 해당 이미지를 표시하려면 show() 메서드를 사용합니다. 이 메서드는 읽은 이미지를 시스템 기본 뷰어에 표시하는 데 사용됩니다. 아래 코드를 통해 이미지를 표시하는 방법을 확인해 보겠습니다.
from PIL import Image

# 이미지 파일 읽기
img = Image.open('sample.jpg')

# 이미지 표시
img.show()
이 코드에서는 지정한 이미지 파일이 기본 이미지 뷰어에 표시됩니다. 이를 통해 이미지 내용을 확인하면서 다음 처리 단계로 진행할 수 있습니다.

3.3 이미지 상세 정보 가져오기

Pillow에서는 이미지의 다양한 정보를 가져올 수 있습니다. 예를 들어, 이미지의 너비와 높이는 size 속성으로 확인할 수 있고, 색 모드는 mode 속성으로 확인할 수 있습니다. 다음과 같이 이미지의 너비와 높이, 파일 형식을 간단히 가져올 수 있습니다.
from PIL import Image

# 이미지 파일 읽기
img = Image.open('sample.jpg')

# 이미지 상세 정보를 표시
print(f'이미지 크기: {img.size}')   # (너비, 높이)
print(f'파일 형식: {img.format}') # 이미지 포맷(JPEG, PNG 등)
print(f'색 모드: {img.mode}')       # 색 모드(RGB, L 등)
이를 통해 읽은 이미지의 기본 정보를 가져와 다음 처리에 활용할 수 있습니다. 예를 들어, 이미지의 너비와 높이를 가져와 해당 크기에 맞는 리사이즈나 트리밍을 할 때 매우 유용합니다.

3.4 Pillow에서 지원하는 이미지 포맷

Pillow는 아래와 같은 다양한 이미지 포맷을 지원합니다.
  • JPEG
  • PNG
  • GIF
  • BMP
  • TIFF
따라서 대부분의 일반적인 이미지 형식을 Pillow로 읽고 조작할 수 있습니다. 예를 들어, 웹 애플리케이션에서 사용자가 업로드한 이미지를 처리할 때 포맷에 구애받지 않고 다양한 형식에 대응할 수 있어 유연하게 처리할 수 있습니다.

4. 기본적인 이미지 처리

4.1 이미지 리사이즈

이미지 처리의 기본 작업 중 하나가 이미지 리사이즈입니다. 리사이즈는 이미지 해상도를 변경하기 위해 사용되며, 웹사이트나 애플리케이션에서 적절한 크기에 맞출 때 유용합니다. Pillow에서는 resize() 메서드를 사용하여 쉽게 이미지 크기를 변경할 수 있습니다. 다음은 이미지 리사이즈를 수행하기 위한 코드 예시입니다.
from PIL import Image

# 이미지를 읽어옵니다
img = Image.open('sample.jpg')

# 이미지 리사이즈 (너비 400px, 높이 300px)
resized_img = img.resize((400, 300))

# 리사이즈지를 저장
resized_img.save('resized_sample.jpg')
이 코드에서는 이미지를 읽어들여, 그 크기를 (400, 300) 로 리사이즈합니다. 리사이즈 후에는 파일로 저장됩니다. 이를 통해 필요에 맞는 크기로 이미지를 출력할 수 있습니다.

4.2 트리밍

트리밍은 이미지의 일부를 잘라내는 작업입니다. 예를 들어 이미지 내 특정 영역만을 추출해 사용하고 싶을 때 유용합니다. Pillow에서는 crop() 메서드를 사용하여 이미지의 지정 범위를 잘라낼 수 있습니다. 다음은 트리밍 코드 예시입니다.
from PIL import Image

# 이미지를 읽어옵니다
img = Image.open('sample.jpg')

# 이미지를 트리밍 (좌상단 좌표 100, 100부터 우하단 좌표 300, 300까지)
cropped_img = img.crop((100, 100, 300, 300))

# 트리밍한 이미지를 저장
cropped_img.save('cropped_sample.jpg')
이 코드에서는 crop() 메서드를 사용해 이미지의 특정 범위를 지정하고, 그 부분만라내어 저장합니다.

4.3 이미지 회전

이미지 회전은 회전 각도를 지정하기만 하면 쉽게 할 수 있습니다. Pillow의 rotate() 메서드를 사용하면 지정한 각도에 따라 이미지를 회전시킬 수 있습니다. 회전 후 이미지가 일부 잘릴 경우 expand=True 옵션을 사용하여 이미지 전체가 표시되도록 확장할 수 있습니다. 다음은 이미지를 45도 회전시키는 코드 예시입니다.
from PIL import Image

# 이미지를 읽어옵니다
img = Image.open('sample.jpg')

# 이미지를 45도 회전 (크기를 확장하여 잘리지 않게)
rotated_img = img.rotate(45, expand=True)

# 회전한 이미지를 저장
rotated_img.save('rotated_sample.jpg')
이 코드에서는 이미지가 45도 회전되고, expand=True 지정으로 회전 후에도 이미지 전체가 저장됩니다.

4.4 이미지 반전

이미지를 좌우 또는 상하로 반전시키는 것도 Pillow에서 쉽게 할 수 있습니다. 예를 들어, 수평 반전(좌우 반전)이나 수직 반전(상하 반전)은 transpose() 메서드를 사용해 실행합니다. 다음은 이미지를 좌우 반전시키는 코드 예시입니다.
from PIL import Image

# 이미지를 읽어옵니다
img = Image.open('sample.jpg')

# 이미지를 좌우 반전
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)

# 반전한 이미지를 저장
flipped_img.save('flipped_sample.jpg')
이 코드에서는 지정된 이미지가 좌우로 반전되어 저장됩니다.

4.5 Pillow에서 지원하는 기타 기본 처리

Pillow는 리사이즈, 트리밍, 회전 및 반전뿐만 아니라 다양한 이미지 처리를 지원합니다. 예를 들어 이미지 밝기와 대비 조정, 색 공간 변환 등도 쉽게 할 수 있습니다. 이를 통해 복잡한 이미지 편집도 프로그램으로 자동화할 수 있습니다.
年収訴求

5. 이미지 포맷 변환 및 저장

5.1 이미지 포맷 변환

Pillow를 사용하면 이미지 포맷을 쉽게 변환할 수 있습니다. 예를 들어 JPEG 형식의 이미지를 PNG 형식으로 변환할 수 있습니다. 포맷 변환은 이미지 파일을 읽고 save() 메서드로 새로운 포맷을 지정하기만 하면 수행됩니다. 다음은 JPEG 이미지를 PNG 형식으로 변환하는 예시입니다.
from PIL import Image

# JPEG 이미지 읽기
img = Image.open('sample.jpg')

# PNG 형식으로 저장
img.save('converted_image.png', 'PNG')
이 코드에서는 sample.jpg라는 JPEG 형식의 이미지를 읽어들여 converted_image.png라는 PNG 형식 파일로 저장합니다. 이렇게 하면 서로 다른 이미지 포맷 간의 변환을 매우 쉽게 수행할 수 있습니다.

5.2 이미지 저장 방법

Pillow로 이미지를 처리한 후, 해당 이미지를 저장할 때 다양한 옵션을 사용할 수 있습니다. 예를 들어 JPEG 형식으로 저장할 때 이미지 품질, 최적화, 프로그레시브 JPEG 등의 설정을 맞춤화할 수 있습니다. 다음은 JPEG 이미지를 저장할 때 품질 및 최적화 옵션을 지정하는 예시입니다.
from PIL import Image

# 이미지 읽기
img = Image.open('sample.jpg')

# JPEG 형식으로 저장 (품질 95, 최적화 포함)
img.save('optimized_image.jpg', 'JPEG', quality=95, optimize=True)
이 코드에서는 quality=95 로 이미지 품질을 지정하고 optimize=True 로 이미지를 최적화하여 저장합니다. 품질 값은 0~100 범위에서 지정할 수 있으며, 숫자가 클수록 고품질로 저장되지만 파일 크기도 커집니다. 또한 optimize=True 를 지정하면 Pillow가 파일 크기를 가능한 한 작게 최적화합니다.

5.3 프로그레시브 JPEG 저장

프로그레시브 JPEG는 인터넷에서 단계적으로 이미지가 표시되는 형식입니다. 페이지가 완전히 로드되기 전에 저해상도에서 고해상도로 단계적으로 표시되므로 사용자 경험을 향상시킬 수 있습니다. Pillow에서 프로그레시브 JPEG를 저장하려면 progressive=True 옵션을 지정합니다.
from PIL import Image

# 이미지 읽기
img = Image.open('sample.jpg')

# 프로그레시브 JPEG로 저장
img.save('progressive_image.jpg', 'JPEG', quality=85, progressive=True)
이 코드에서는 progressive=True 를 지정하여 JPEG 이미지를 저장함으로써 프로그레시브 JPEG로 출력합니다. 이를 통해 웹 페이지 로드 중에 이미지가 단계적으로 표시됩니다.

5.4 EXIF 정보 보존

EXIF(Exchangeable Image File Format)는 디지털 카메라 등에서 촬영된 이미지에 삽입되는 메타데이터입니다. 예를 들어 촬영 일시, 카메라 설정, GPS 정보 등이 포함됩니다. Pillow에서는 EXIF 정보를 유지한 채로 이미지를 저장할 수 있습니다. 다음은 EXIF 정보를 유지하면서 이미지를 저장하는 예시입니다.
from PIL import Image

# 이미지 읽기
img = Image.open('sample.jpg')

# EXIF 정보 가져오기
exif_data = img.info.get('exif')

# EXIF 정보를 유지하면서 JPEG 형식으로 저장
img.save('exif_image.jpg', 'JPEG', expt=exif_data)
이 코드에서는 원본 이미지에 포함되어 있던 EXIF 정보를 가져와,

6. 이미지에 필터와 효과 적용

6.1 이미지 밝기와 대비 조정

Pillow를 사용하면 이미지의 밝기와 대비를 쉽게 조정할 수 있습니다. 이를 위해 ImageEnhance 모듈이 편리합니다. ImageEnhance.Brightness()ImageEnhance.Contrast()를 사용하여 이미지의 시각 효과를 조정할 수 있습니다. 다음은 밝기를 조정하는 코드 예시입니다。
from PIL import Image, ImageEnhance

# 이미지 읽기
img = Image.open('sample.jpg')

# 밝기 조정 (1.5배 밝게)
enhancer = ImageEnhance.Brightness(img)
bright_img = enhancer.enhance(1.5)

# 조정 후 이미지 저장
bright_img.save('bright_sample.jpg')
이 코드에서는 enhance(1.5)를 사용하여 이미지를 1.5배 밝게 합니다. enhance()의 인수로 밝기 배율을 지정할 수 있으며, 1.0은 원래 밝기, 1.0 미만은 어둡게, 1.0 이상은 밝게 됩니다. 마찬가지로, 대비 조정도 다음과 같이 할 수 있습니다。
from PIL import Image, ImageEnhance

# 이미지 읽기
img = Image.open('sample.jpg')

# 대비 조정 (2.0배 강조)
enhancer = ImageEnhance.Contrast(img)
contrast_img = enhancer.enhance(2.0)

# 조정 후 이미지 저장
contrast_img.save('contrast_sample.jpg')
이 코드에서는 대비를 2배로 강조합니다. 대비를 강화하면 이미지의 명암이 더 두드러져 선명한 인상을 줄 수 있습니다。

6.2 블러와 샤프닝 등의 필터

Pillow에서는 이미지에 필터를 적용할 수도 있습니다. 예를 들어, 이미지를 블러 처리하거나 샤프하게 만드는 효과를 쉽게 추가할 수 있습니다. 이를 위해 ImageFilter 모듈을 사용합니다. 다음은 블러 필터를 적용하는 코드 예시입니다。
from PIL import Image, ImageFilter

# 이미지 읽기
img = Image.open('sample.jpg')

# 블러 필터 적용
blurred_img = img.filter(ImageFilter.BLUR)

# 필터 적용 후 이미지 저장
blurred_img.save('blurred_sample.jpg')
이 코드에서는 ImageFilter.BLUR를 사용하여 이미지를 블러 처리합니다. 마찬가지로, 샤프 필터를 적용하려면 ImageFilter.SHARPEN을 사용합니다。
# 샤프 필터 적용
sharpened_img = img.filter(ImageFilter.SHARPEN)

# 필터 적용 후 이미지 저장
sharpened_img.save('sharpened_sample.jpg')
이와 같이 이미지의 가장자리를 강조하여 샤프하게 하거나, 부드러운 인상을 위해 블러 필터를 사용할 수 있습니다。

6.3 특수 필터 사용

또한 Pillow에는 몇 가지 특수 필터도 제공됩니다. 예를 들어, 에지 검출이나 윤곽 추출 등 이미지 분석에 유용한 필터가 있습니다. 다음은 에지 검출 필터를 적용하는 코드 예시입니다。
from PIL import Image, ImageFilter

# 이미지 읽기
img = Image.open('sample.jpg')

# 에지 검출 필터 적용
edge_img = img.filter(ImageFilter.FIND_EDGES)

# 필터 적용 후 이미지 저장
edge_img.save('edge_sample.jpg')
이 코드에서는 ImageFilter.FIND_EDGES를 사용하여 이미지의 에지 부분만 강조한 이미지를 생성합니다. 이러한 필터는 이미지 분석 및 디자인에 유용합니다。

7. 텍스트와 도형 그리기

7.1 Pillow로 텍스트를 그리는 방법

이미지에 텍스트를 추가하는 것은 Pillow를 사용한 이미지 처리의 중요한 기능 중 하나입니다. 광고 배너, 썸네일, 로고 이미지 등 다양한 디자인 요소에 텍스트를 넣을 수 있습니다. Pillow의 ImageDraw 모듈을 사용하면 이미지 위에 자유롭게 텍스트를 그릴 수 있습니다. 먼저, 기본적인 텍스트 그리기 방법을 살펴보겠습니다。
from PIL import Image, ImageDraw, ImageFont

# 이미지 읽기
img = Image.open('sample.jpg')

# ImageDraw 객체 생성
draw = ImageDraw.Draw(img)

# 텍스트 그리기
draw.text((10, 10), 'Hello, Pillow!', fill=(255, 255, 255))

# 이미지 저장
img.save('text_sample.jpg')
이 코드에서는 ImageDraw.Draw()로 그리기용 객체를 생성하고, draw.text() 메서드로 지정한 위치에 텍스트 “Hello, Pillow!”를 그립니다. fill 옵션을 사용하여 텍스트 색을 흰색(RGB: (255, 255, 255))으로 설정합니다。

7.2 폰트 지정

기본적으로 Pillow는 시스템 기본 폰트를 사용하지만, ImageFont 모듈을 사용하면 커스텀 폰트와 크기를 지정할 수 있습니다. 아래 코드는 지정한 폰트와 폰트 크기로 텍스트를 그리는 방법입니다。
from PIL import Image, ImageDraw, ImageFont

# 이미지 읽기
img = Image.open('sample.jpg')

# ImageDraw 객체 생성
draw = ImageDraw.Draw(img)

# 폰트 지정 (TrueType 폰트 지정)
font = ImageFont.truetype('arial.ttf', 40)

# 텍스트 그리기
draw.text((10, 10), 'Custom Font!', font=font, fill=(255, 255, 255))

# 이미지 저장
img.save('font_sample.jpg')
이 코드에서는 ImageFont.truetype()로 지정한 폰트 파일(arial.ttf)과 폰트 크기(40)를 사용하여 텍스트를 그립니다. 폰트 파일은 시스템에 설치된 것이거나 직접 추가한 파일을 지정할 수 있습니다。

7.3 도형 그리기

Pillow에서는 텍스트뿐만 아니라 직선, 사각형, 원 등 도형도 쉽게 그릴 수 있습니다. 이를 위해 ImageDraw 모듈의 line(), rectangle(), ellipse() 메서드를 사용합니다。 다음은 이미지 위에 도형을 그리는 코드 예시입니다。
from PIL import Image, ImageDraw

# 이미지 읽기
img = Image.open('sample.jpg')

# ImageDraw 객체 생성
draw = ImageDraw.Draw(img)

# 선 그리기
draw.line((0, 0, 100, 100), fill=(255, 0, 0), width=5)

# 사각형 그리기
draw.rectangle((50, 50, 150, 150), outline=(0, 255, 0), width=3)

# 원(타원) 그리기
draw.ellipse((200, 200, 300, 300), outline=(0, 0, 255), width=3)

# 이미지 저장
img.save('shape_sample.jpg')
이 코드에서는 빨간 선, 초록 사각형, 파란 원을 이미지 위에 그립니다. line() 메서드는 좌표를 지정해 선을 그리고, rectangle() 메서드로 사각형을, ellipse() 메서드로 원이나 타원을 그립니다. outline 옵션으로 도형 외곽선 색을, width 옵션으로 선 두께를 지정합니다。

7.4 복잡한 그리기의 응용

Pillow에서는 여러 도형과 텍스트를 조합하여 복잡한 디자인을 만들 수 있습니다. 예를 들어 썸네일 이미지에 제목이나 설명을 추가하거나 배너 광고에 여러 텍스트와 도형을 배치할 수 있습니다. 이를 통해 웹사이트나 애플리케이션의 시각 콘텐츠 커스터마이징이 크게 쉬워집니다。

8. 응용편: 이미지 합성 및 마스크 처리

8.1 이미지 합성

이미지 합성은 여러 이미지를 결합하여 하나의 이미지를 만드는 과정입니다. 예를 들어, 배경 이미지 위에 다른 이미지를 겹쳐 배너나 콜라주를 만들 수 있습니다. Pillow에서는 paste() 메서드를 사용하여 이미지를 쉽게 합성할 수 있습니다。 다음은 이미지를 합성하는 기본 코드 예시입니다。
from PIL import Image

# 배경 이미지와 합성할 이미지를 읽어옵니다
background = Image.open('background.jpg')
overlay = Image.open('overlay.png')

# 이미지를 합성합니다 (위치: x=100, y=100)
background.paste(overlay, (100, 100), overlay)

# 합성한 이미지를 저장합니다
background.save('combined_image.jpg')
이 코드에서는 background.jpg 위에 overlay.png를 좌표 (100, 100)에 붙여넣고 있습니다. paste() 메서드의 세 번째 인수에 overlay 이미지를 전달함으로써 알파 채널(투명도)을 고려한 합성이 가능해집니다. 이를 통해 투명 PNG 등을 겹칠 때도 배경과 자연스럽게 통합할 수 있습니다。

8.2 마스크 이미지를 이용한 잘라내기

마스크 이미지를 사용하면 특정 형태로 이미지를 잘라낼 수 있습니다. 예를 들어, 원형이나 별형과 같은 복잡한 형태로 이미지를 잘라서 표시할 수 있습니다. 이를 위해 Pillow의 paste() 메서드와 마스크 이미지를 함께 사용합니다。 다음은 마스크 이미지를 사용하여 원형으로 잘라내는 코드 예시입니다。
from PIL import Image, ImageDraw

# 이미지를 읽어옵니다
img = Image.open('sample.jpg')

# 마스크 이미지를 생성합니다 (원형 마스크)
mask = Image.new('L', img.size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((100, 100, 300, 300), fill=255)

# 마스크를 적용하여 이미지를 붙여넣습니다
result = Image.new('RGB', img.size)
result.paste(img, (0, 0), mask)

# 결과를 저장합니다
result.save('masked_image.jpg')
이 코드에서는 Image.new()로 마스크 이미지를 만들고 그 위에 원형을 그립니다. 마스크 이미지의 흰색 부분이 가시 영역이 되고, 검은색 부분은 투명으로 처리됩니다. 이후 paste() 메서드로 마스크를 적용하여 원본 이미지를 붙여넣습니다. 이를 통해 원본 이미지가 원형으로 잘라진 상태로 저장됩니다。

8.3 알파 채널을 이용한 투명 이미지 만들기

알파 채널을 사용하면 부분적으로 투명한 이미지를 만들 수 있습니다. Pillow에서는 putalpha() 메서드를 사용하여 이미지에 알파 채널을 추가하고 투명도를 조절할 수 있습니다。 다음은 알파 채널을 추가하여 투명 PNG 이미지를 만드는 예시입니다。
from PIL import Image

# 이미지를 읽어옵니다
img = Image.open('sample.jpg').convert('RGBA')

# 알파 채널을 추가합니다
alpha = img.split()[3]
alpha = alpha.point(lambda p: p * 0.5)  # 透過度50%
img.putalpha(alpha)

# 투명 이미지를 저장합니다
img.save('transparent_image.png')
이 코드에서는 split() 메서드를 사용해 이미지에서 알파 채널을 추출하고, 그 투명도를 50%로 변경합니다. 이후 putalpha() 메서드로 이미지에 알파 채널을 다시 추가하여 투명 PNG로 저장합니다。

8.4 응용 기술로 할 수 있는 일

이러한 응용 기술을 사용하면 이미지 편집 및 합성을 자동화하거나, 웹 디자인 및 광고용 배너를 효율적으로 만들 수 있습니다. 특히 투명도를 활용한 로고 겹쳐쓰기나 특정 부분만 강조한 이미지 제작 등 다양한 용도에 대응할 수 있습니다. Pillow의 유연한 이미지 처리 기능을 활용하면 프로젝트에 맞는 창의적인 비주얼 콘텐츠를 손쉽게 생성할 수 있습니다。

9. 요약

이번 기사에서는 Python 이미지 처리 라이브러리 “Pillow”를 사용한 다양한 이미지 처리 기술에 대해 자세히 설명했습니다. Pillow를 활용하면 이미지 읽기, 저장, 리사이즈 및 트리밍과 같은 기본 작업부터 합성, 필터 적용, 텍스트 및 도형 그리기까지 폭넓은 이미지 조작을 매우 쉽게 수행할 수 있습니다.

9.1 Pillow 기본 작업 복습

우선 Pillow 설치부터 시작하여 이미지를 열고 표시하는 방법과 이미지의 기본 정보를 얻는 방법을 배웠습니다. 이를 통해 이미지 처리의 기초를 이해하고 모든 이미지에 대해 유연하게 작업할 수 있게 되었을 것입니다.

9.2 리사이즈, 트리밍, 회전 등 기본 이미지 편집

리사이즈, 트리밍, 회전 등은 이미지 편집의 기본 기술입니다. 이러한 작업을 사용하면 이미지의 크기와 형태를 자유롭게 변경하고, 필요한 부분만 잘라내거나 방향을 조정할 수 있습니다. 이러한 작업은 웹 디자인이나 애플리케이션 개발에서도 매우 유용합니다.

9.3 필터 및 효과 적용

Pillow를 사용하면 이미지의 밝기와 대비를 조정하거나, 블러, 샤프닝, 에지 검출과 같은 필터를 쉽게 적용할 수 있습니다. 이를 통해 이미지의 질감과 인상을 크게 바꿀 수 있어 전문적인 이미지 편집이 가능해집니다.

9.4 텍스트 및 도형 그리기, 이미지 합성

또한 텍스트와 도형을 그리거나 여러 이미지를 합성함으로써 보다 고급 디자인이 가능합니다. 예를 들어 배너나 로고 제작, 투명 PNG 이미지 생성 등 활용 범위가 넓어집니다. 특히 마스크 처리와 알파 채널을 이용한 투명 이미지 제작은 웹이나 애플리케이션 디자인에서 매우 유용합니다.

9.5 앞으로의 활용을 위해

Pillow의 기능은 아직도 깊이가 있으며, 공식 문서와 다른 리소스를 활용하면 더 많은 응용이 가능합니다. 웹 애플리케이션에서의 자동 이미지 처리, 데이터 사이언스 프로젝트에서의 이미지 분석, 그리고 머신러닝에서의 이미지 데이터 전처리 등 다양한 분야에서 Pillow는 중요한 도구가 됩니다. 이 지식을 활용하여 앞으로 자신의 프로젝트에서 Pillow를 자유롭게 다루고 효율적으로 이미지 처리를 수행할 수 있을 것입니다.
侍エンジニア塾