Pillow를 사용한 썸네일 만들기

웹에 업로드 되는 이미지의 리사이징 그리고 썸네일 생성을 위해 Pillow 패키지를 활용해보았다.

Pillow 활용

설치

pip install pillow

기본 활용

from PIL import Image
import os

# 이미지 불러오기
image = Image.open('bo_oki.jpg')

# 썸네일 만들기
size = 128, 128

file, ext = os.path.splitext(infile)
image = Image.open(infile)
image.thumbnail(size)
image.save(file + '_thumbnail', "JPEG")

Django 모델에 적용

class Profile(models.Model):
    # 로고 이미지 받을 필드
    logo = models.ImageField(
        upload_to='logo',
    )
    # 썸네일 처리 된 이미지 저장 필드
    thumbnail = models.ImageField(
        upload_to='logo_thumbs',
    )
    
    # save() 메서드 재정의
    def save(self, *args, **kwargs):
        if not self.create_thumbnail():
            raise Exception('Failed creating thumbnails')
        super(Profile, self).save(*args, **kwargs)
    
    # 썸네일 처리
    def create_thumbnail(self):
        size = 128, 128
        file, ext = os.path.splitext(infile)
        image = Image.open(infile)
        image.thumbnail(size)
        ...
        image.save(file + '_thumbnail', "JPEG")
        # thumbnail 필드에 저장
        self.thumbnail.save()