Python Pillow resize 사용 방법

이미지 사이즈를 조정할 때 활용 가능한 Python Pillow resize 사용 방법을 살펴보겠습니다.

Python Pillow resize 사용 방법

우선 Image 모듈의 resize 메서드는 말 그대로 이미지 크기를 변경할 때 사용하는 방법입니다.

설명보다 실습, 실습보다 결과물 먼저 보고 가시죠. 다음은 resize를 적용할 원본 이미지입니다. 원본 이미지의 크기는 772⨯364px 입니다.

그림 1. Pillow resize에 이용할 원본 이미지
그림 1. Pillow resize에 이용할 원본 이미지

이미지 크기 줄이기: 고정값

아래 그림 2는 위의 그림 1을 100⨯100px으로 resize한 결과입니다.

그림 2. Pillow resize 100⨯100 으로 변경한 결과
그림 2. Pillow resize 100⨯100 으로 변경한 결과

사용방법은 매우 간단합니다. resize 메서드의 size 파라미터에 tuple로 (width, height)값을 넣어주면 됩니다.

from PIL import Image

img = Image.open("test.png")
img = img.resize(size=(100, 100))
img.save("output.png")
Python

그런데 혹시 그림 2를 보면서 불편함을 느낀 분 계시지 않을까요? 폭과 높이를 100으로 임의 지정해 버리면서 원본 이미지의 비율이 망가졌습니다. 그래서 내용물은 세로로 길쭉해져 버렸습니다.

이미지 크기 줄이기: 비율

비율에 맞춰서 resize하려면 원본 이미지의 width와 height를 가져와서 이미지의 비율을 구해서 활용하면 됩니다. 6번 라인에서 new_height를 구할 때 꼭 int로 형변환을 해 주어야 합니다. resize에서 받는 tuple에 들어가는 값은 정수형 값이기 때문입니다. 만약 float 상태로 들어가면 “TypeError: integer argument expected, got float”와 같은 메시지를 만나게 됩니다.

from PIL import Image

img = Image.open("test.png")
ratio = img.height / img.width
new_width = 200
new_height = int(ratio * new_width)
img = img.resize((new_width, new_height))
img.save("output.png")
Python

위의 코드를 실행한 결과는 아래의 그림 3과 같습니다.

그림 3. Pillow resize 폭 200을 기준으로 기존 이미지의 비율을 유지한 결과
그림 3. Pillow resize 폭 200을 기준으로 기존 이미지의 비율을 유지한 결과

이미지 크기 확대하기

특정 영역만 resize하기를 원하는 경우에는 box 파라미터를 추가로 사용하면 됩니다. 이번에는 원본 이미지의 (100, 100)부터 (300, 300)까지의 200⨯200px 크기의 이미지를 300⨯300px의 크기로 키웠습니다.

from PIL import Image

img = Image.open("test.png")
ratio = img.height / img.width
img = img.resize(size=(300, 300), box=(100, 100, 300, 300))
img.save("output.png")
Python

굳이 crop을 하고 이미지를 다시 resize하는 방법도 있겠지만, resize 메서드만으로도 가능하다는 점 알고 계시면 코드를 보다 간결하게 유지할 수 있을 거에요.

그림 4. Pillow resize의 box 파라미터 사용 결과
그림 4. Pillow resize의 box 파라미터 사용 결과

여기까지 Python 코드로 Pillow의 Image 모듈의 resize 메서드를 이용한 이미지 크기 조정 방법을 살펴보았습니다.

관련 자료

Pillow 패키지의 Image Module 페이지에서 resize 메서드 부분을 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment