Source

django-ckeditor / ckeditor / forms.py

from __future__ import division
from django import forms
from django.core.files.storage import default_storage
from django.core.files import temp
try:
    from PIL import Image
except ImportError:
    import Image
import os
from math import floor
from django.conf import settings


MAX_RESOLUTION = (1920, 1080)
UPLOAD_DIRECTORY = getattr(settings, 'CKEDITOR_UPLOAD_DIRECTORY', 'ckeditor')


class CKEditorUploadForm(forms.Form):
    upload = forms.ImageField()

    def save(self):
        try:
            upload = self.cleaned_data['upload']
            image = Image.open(upload.file)
            if image.size[0] > MAX_RESOLUTION[0] or image.size[1] > MAX_RESOLUTION[1]:
                ratio = max(image.size[0] / MAX_RESOLUTION[0], image.size[1] / MAX_RESOLUTION[1])
                width = floor(image.size[0] / ratio)
                height = floor(image.size[1] / ratio)
                image = image.resize((width, height), Image.ANTIALIAS)
                upload.file = temp.NamedTemporaryFile(suffix='.upload')
                name, ext = os.path.splitext(upload.name)
                format = Image.EXTENSION.get(ext, 'JPEG')
                image.save(upload.file, format)
            path = default_storage.save(UPLOAD_DIRECTORY + '/' + upload.name, upload)
            url = default_storage.url(path)
            return url
        except KeyError:
            return ''
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.