Server IP : 85.214.239.14 / Your IP : 3.142.251.42 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /srv/modoboa/env/lib/python3.5/site-packages/ckeditor_uploader/backends/ |
Upload File : |
from __future__ import absolute_import import os from io import BytesIO from django.conf import settings from django.utils.functional import cached_property from PIL import Image from ckeditor_uploader import utils THUMBNAIL_SIZE = getattr(settings, "CKEDITOR_THUMBNAIL_SIZE", (75, 75)) class PillowBackend(object): def __init__(self, storage_engine, file_object): self.file_object = file_object self.storage_engine = storage_engine @cached_property def is_image(self): try: Image.open(BytesIO(self.file_object.read())).verify() # verify closes the file return True except IOError: return False finally: self.file_object.seek(0) def _compress_image(self, image): quality = getattr(settings, "CKEDITOR_IMAGE_QUALITY", 75) image = image.resize(image.size, Image.ANTIALIAS).convert('RGB') image_tmp = BytesIO() image.save(image_tmp, format="JPEG", quality=quality, optimize=True) return image_tmp def save_as(self, filepath): if not self.is_image: saved_path = self.storage_engine.save(filepath, self.file_object) return saved_path image = Image.open(self.file_object) should_compress = getattr(settings, "CKEDITOR_FORCE_JPEG_COMPRESSION", False) is_animated = hasattr(image, 'is_animated') and image.is_animated if should_compress and not is_animated: file_object = self._compress_image(image) filepath = "{}.jpg".format(os.path.splitext(filepath)[0]) saved_path = self.storage_engine.save(filepath, file_object) else: file_object = self.file_object saved_path = self.storage_engine.save(filepath, self.file_object) if not is_animated: self.create_thumbnail(file_object, saved_path) return saved_path def create_thumbnail(self, file_object, file_path): thumbnail_filename = utils.get_thumb_filename(file_path) thumbnail_io = BytesIO() image = Image.open(file_object).convert('RGB') image.thumbnail(THUMBNAIL_SIZE, Image.ANTIALIAS) image.save(thumbnail_io, format='JPEG', optimize=True) return self.storage_engine.save(thumbnail_filename, thumbnail_io)