debian-django-ckeditor/ckeditor/image/pillow_backend.py

67 lines
1.6 KiB
Python

from io import BytesIO
import os.path
try:
from PIL import Image, ImageOps
except ImportError:
import Image
import ImageOps
from django.core.files.storage import default_storage
from django.core.files.uploadedfile import InMemoryUploadedFile
from ckeditor import utils
THUMBNAIL_SIZE = (75, 75)
def image_verify(f):
try:
Image.open(f).verify()
except IOError:
raise utils.NotAnImageException
def create_thumbnail(file_path):
thumbnail_filename = utils.get_thumb_filename(file_path)
try:
thumbnail_format = utils.get_image_format(os.path.splitext(file_path)[1])
except KeyError:
thumbnail_format = 'image/jpeg'
file_format = thumbnail_format.split('/')[1]
image = default_storage.open(file_path)
image = Image.open(image)
# Convert to RGB if necessary
# Thanks to Limodou on DjangoSnippets.org
# http://www.djangosnippets.org/snippets/20/
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
# scale and crop to thumbnail
imagefit = ImageOps.fit(image, THUMBNAIL_SIZE, Image.ANTIALIAS)
thumbnail_io = BytesIO()
imagefit.save(thumbnail_io, format=file_format)
thumbnail = InMemoryUploadedFile(
thumbnail_io,
None,
thumbnail_filename,
thumbnail_format,
len(thumbnail_io.getvalue()),
None)
thumbnail.seek(0)
return default_storage.save(thumbnail_filename, thumbnail)
def should_create_thumbnail(file_path):
image = default_storage.open(file_path)
try:
Image.open(image)
except IOError:
return False
else:
return True