import os import uuid from django.utils.deconstruct import deconstructible from imagekit.processors import ResizeToFill class ConvertToRGBA(object): """Converts an image to RGBA mode.""" def process(self, img): if img.mode not in ('RGBA', 'LA'): img = img.convert('RGBA') return img @deconstructible class UniquePathAndRename(object): def __init__(self, upload_to): self.upload_to = upload_to def __call__(self, instance, filename): ext = filename.split('.')[-1] new_filename = f"{uuid.uuid4().hex}.{ext}" return os.path.join(self.upload_to, new_filename) def image_optimizer(upload_to, width, height, quality, img_format): """ ProcessedImageField için gerekli olan `upload_to`, `processors`, `format` ve `options` parametrelerini dinamik olarak oluşturur. """ processors = [ResizeToFill(width, height)] if img_format == 'PNG': processors.insert(0, ConvertToRGBA()) return { 'upload_to': UniquePathAndRename(upload_to), 'processors': processors, 'format': img_format, 'options': {'quality': quality} }