Django Imagekit
Django Imagekit
Django에서 썸네일 필드를 정의하고 썸네일 파일을 자동 생성 및 매핑 해주는 라이브러리
Prerequired
pip install pillowpip install pilkitpip install django-imagekit
설정에 다음 항목 추가
INSTALLED_APPS = [..'imagekit']################################################################### Thumbnail##################################################################IMAGEKIT_CACHEFILE_DIR = 'CACHE/images'# imagekit.cachefiles.strategies.JustInTime: 파일 호출 시 썸네일 있는지 확인# imagekit.cachefiles.strategies.Optimistic: 저장할때만 썸네일 생성IMAGEKIT_DEFAULT_CACHFILE_STRATEGY = 'imagekit.cachefiles.strategies.JustInTime'# JPEG, PNG, BMP.. https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
사용
모델에 다음과 같이 설정
THUMBNAIL_FORMAT = 'JPEG'THUMBNAIL_WIDTH = 100THUMBNAIL_HEIGHT = 100THUMBNAIL_QUALITY = 100class ImageTest(models.Model):original_image = models.ImageField(null=True, blank=True, upload_to=IMAGE_ROOT_PATH)thumbnail_image = ImageSpecField(source='original_image', # 원본이 저장될 필드processors=[Thumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT)],format=THUMBNAIL_FORMAT,options={'quality': THUMBNAIL_QUALITY})
테스트
from tests.models.image_test import ImageTestimage_test = ImageTest.objects.first()print (image_test.thumbnail_image.url)> /media/<IMAGEKIT_CACHEFILE_DIR>/<IMAGE_ROOT_PATH>/<원본파일이름>/199f2db624c51c3445c5b3f0356fc000.jpg
동작
- 설정이 모델에 정의되어 있으므로 설정을 변경하려면 migrate를 해야한다.
- 원본 이미지 필드를 source로 참조하고, 원본 이미지를 업로드 한다.
- 썸네일 필드 객체를 호출하면
/media/<IMAGEKIT_CACHEFILE_DIR>/<IMAGE_ROOT_PATH>/<원본파일이름>/
폴더에 썸네일 이미지가 생성된다. - 크기 등 변경 시 해당 폴더에 새로운 썸네일이 생성되고, 설정값이 같으면 기존 생성된 썸네일을 사용한다.
캐시 정책
from imagekit.utils import get_cacheget_cache().clear()
이런 방법이 있긴 한데 정상적으로 동작하지 않음. 아마 메모리 내 캐시만 날리는듯? 수동으로 파일 삭제하는게 가장 확실함
주의
설정 값이 변경되면
python manage.py makemigrationpython manage.py migrate
꼭 해줘야함. 안하면 적용 안됨
참조링크
유사 서비스
- sorl-thumbnail
- 키밸류 스토어를 사용해야함. memcached나 redis를 권장함