Pillow (Python 라이브러리)로 이미지 처리하기

oen·2020년 12월 28일
0

🐍 Python

목록 보기
2/4
post-thumbnail

Pillow

Python 라이브러리인 Pillow 로 이미지를 처리하는 몇가지 방법을 정리해 보았다.

Pillow 설치

우선 가상환경을 사용해 프로젝트 폴더 별로 파이썬 환경을 분리하고 라이브러리 설치 위치도 분리한다.
나는 direnv를 사용했다.


# .envrc

use python 3.8.0 # python 버전은 3.8.0을 사용

. envrc 파일 생성


direnv allow

. envrc파일을 생성하면 터미널에 Run `direnv allow` to approve its content라는 명령어가 뜬다. (안뜨면 터미널에서 엔터를 한번 눌러보자)
allow 명령어로 현재 디렉터리의 .envrc 파일의 사용을 허가하면
디렉터리에 .direnv 폴더가 생성된다.


pip install Pillow

pip로 Pillow를 설치


pip show Pillow        
Name: Pillow
Version: 8.0.1
...
Location: /Users/yeinlee/private_exercise/environ/.direnv/python-3.8.0/lib/python3.8/site-packages
...

Location을 보면 Pillow가 아까 만들어진 가상환경 폴더인 .direnv 아래에 설치된 걸 확인할 수 있다.

🪄 이미지 파일 객체 생성

from PIL import Image


im = Image.open('original.png')

# 이미지 파일 객체
print(im) # <PIL.PngImagePlugin.PngImageFile image mode=RGB size=1200x599 at 0x104659700>

Pillow 라이브러리 패키지에서 Image를 임포트한다.
Image.open() 메서드는 이미지 파일을 열어 이미지 객체를 리턴한다.

🪄 이미지 크기 출력

print(im.size) # (1200, 599)

이미지 객체의 size 속성은 이미지의 크기(width, height)를 리턴한다.

🪄 이미지 확장자 출력

print(im.format) # PNG

🪄 이미지 확장자 변경

im.save('converted.gif')

save 메소드에 확장자를 변경한 파일명을 넘기면 확장자가 변경된 파일이 새로 저장된다.

Image객체.save() 메서드는 이미지 파일을 새로 저장할 때 사용

🪄 이미지 사이즈 변경

from PIL import Image


# 기존 이미지로 객체 생성
im = Image.open('original.png')
# 사이즈 출력
print(im.size) # (1200, 599)

# 사이즈가 변경된 새로운 이미지 객체 생성
im2 = im.resize((600, 600))
# 사이즈 출력
print(im2.size) # (600, 600)

im2.save('resized.gif')

🪄 특정 크기의 썸네일 이미지 생성 (비율은 유지됨)

from PIL import Image


im = Image.open('original.png')
print(im.size) # (1200, 599)

im.thumbnail((600, 600))  
im.save('thumbnail.gif')

im2 = Image.open('thumbnail.gif')
print(im2.size) # (600, 300)

Image 객체의 thumbnail((width, height)) 메서드는 특정 크기(가로 세로 비율은 유지)의 썸네일 이미지 객체를 리턴한다.
save 메서드를 호출하면 600 x 300 크기의 썸네일 이미지가 새로 저장된다.

⚠️ 600 x 600이 아니다.
resize()는 정확히 (600, 600) 사이즈가 변경되는 반면 thumbnail()은 가로 세로 비가 유지되는 한에서 사이즈가 변경된다.
따라서 1200x599 이미지를 thumbnail((600, 600)) 하면 600x300 으로 resize 하는 것과 동일하다.

🪄 이미지 잘라내기

from PIL import Image


im = Image.open('original.png')
print(im.size) # (1200, 599)

im2 = im.crop((0, 300, 600, 600))
im2.save('cropimage.gif')

print(im2.size) # (600, 300)

crop() 메서드로 이미지의 일부를 잘라낸다.
파라미터는 왼쪽 윗 모서리를 (0,0)로 기준을 잡았을 때의
(left_start, top_start, left_start+width, top_start+height) 좌표 정보를 튜플로 전달한다.

튜플: (가로 시작점, 세로 시작점, 가로 범위, 세로 범위)

crop((0, 300, 600, 600))로 가로 시작점은 0, 세로 시작점은 300, 가로 길이는 600, 세로 길이는 300 인 cropimage.gif 이미지가 저장된다.

🪄 이미지 회전

from PIL import Image


im = Image.open('original.png')

# 90도 회전
im2 = im.rotate(90)
im2.save('rotated.gif')

🪄 이미지 필터링

from PIL import Image, ImageFilter


im = Image.open('original.png')

im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.gif')

이미지 객체의 filter(필터종류) 메서드를 호출한다.
Pillow는 이미지를 필터링하기 위한 기본적인 필터들을 제공한다. 필터종류는 ImageFilter 모듈을 import 해서 사용할 수 있다.

이미지 블러 처리: ImageFilter.BLUR 필터 사용

윤곽만 표시: ImageFilter.CONTOUR 필터 사용

profile
🐾

0개의 댓글