Auto rescale quick upload image sizes

This commit is contained in:
Antoine Bartuccio 2025-04-09 22:50:51 +02:00
parent 6e39b59dd5
commit 744223b76f

View File

@ -54,7 +54,7 @@ from django.utils.html import escape
from django.utils.timezone import localdate, now from django.utils.timezone import localdate, now
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.modelfields import PhoneNumberField
from PIL import Image from PIL import Image, ImageOps
if TYPE_CHECKING: if TYPE_CHECKING:
from django.core.files.uploadedfile import UploadedFile from django.core.files.uploadedfile import UploadedFile
@ -1110,6 +1110,7 @@ class QuickUploadImage(models.Model):
"""Images uploaded by user outside of the SithFile mechanism""" """Images uploaded by user outside of the SithFile mechanism"""
IMAGE_NAME_SIZE = 100 IMAGE_NAME_SIZE = 100
MAX_IMAGE_SIZE = 600 # Maximum px on width / length
uuid = models.UUIDField(unique=True, db_index=True) uuid = models.UUIDField(unique=True, db_index=True)
name = models.CharField(max_length=IMAGE_NAME_SIZE, blank=False) name = models.CharField(max_length=IMAGE_NAME_SIZE, blank=False)
@ -1138,9 +1139,10 @@ class QuickUploadImage(models.Model):
) -> Self: ) -> Self:
def convert_image(file: UploadedFile) -> ContentFile: def convert_image(file: UploadedFile) -> ContentFile:
content = BytesIO() content = BytesIO()
Image.open(BytesIO(file.read())).save( image = Image.open(BytesIO(file.read()))
fp=content, format="webp", optimize=True if image.width > cls.MAX_IMAGE_SIZE or image.height > cls.MAX_IMAGE_SIZE:
) image = ImageOps.contain(image, (600, 600))
image.save(fp=content, format="webp", optimize=True)
return ContentFile(content.getvalue()) return ContentFile(content.getvalue())
identifier = str(uuid4()) identifier = str(uuid4())