Python 이미지 처리하는 Pillow 라이브러리 알아보기
오늘은 Python으로 PIL을 대체하여 이미지 처리할 수 있는 라이브러리인 Pillow를 적용해보려 합니다.
Pillow 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
pip3 install virtualenv
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
pip3 install --upgrade pip
pip의 업그레이드가 존재하는지 확인하고 진행합니다.
pip install Pillow
pip로 Pillow를 설치합니다.
convert
import os
from PIL import Image
input_img = input()
f, e = os.path.splitext(input_img)
try:
Image.open(input_img).save("original.jpeg")
except IOError:
pass
다른 확장자를 jpeg 사진으로 저장할 수 있습니다.
thumnail
from PIL import Image
try:
im = Image.open("original.png")
im.thumbnail((128, 128))
im.save("original.thumbnail", "JPEG")
except IOError:
pass
썸네일을 만들 수 있습니다.
identity
from PIL import Image
try:
with Image.open("original.png") as im:
print(im.format, im.size, im.mode)
except IOError:
pass
이미지 파일의 정보를 식별할 수 있습니다.
crop
from PIL import Image
try:
with Image.open("original.png") as im:
box = (100, 100, 400, 400)
region = im.crop(box)
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
im.save("pasted_img.png", "PNG")
print(region)
except IOError:
pass
이미지를 자르고 붙일 수 있습니다.
roll
from PIL import Image
try:
with Image.open("original.png") as im:
x_size, y_size = im.size
delta = 300 % x_size
part1 = im.crop((0, 0, delta, y_size))
part2 = im.crop((delta, 0, x_size, y_size))
im.paste(part1, (x_size - delta, 0, x_size, y_size))
im.paste(part2, (0, 0, x_size - delta, y_size))
im.save("roll_img.png", "PNG")
except IOError:
pass
이미지를 말린 모양으로 변환할 수 있습니다.
geometrical
from PIL import Image
try:
with Image.open("original.png") as im:
out = im.resize((128, 128))
out.save("resize_img.png", "PNG")
out = im.rotate(45) # degrees counter-clockwise
out.save("rotate_img.png", "PNG")
except IOError:
pass
지오메트리 변환을 통해 이미지의 크기를 변경하거나 회전시킬 수 있습니다.
filter
from PIL import Image
from PIL import ImageFilter
try:
with Image.open("original.png") as im:
out = im.filter(ImageFilter.BoxBlur(20))
out.save("filter_img.png", "PNG")
except IOError:
pass
별도로 ImageFilter를 가져와서 블러 효과 처리를 할 수 있습니다.
Written on June 1, 2019