adding conversion for ImageAttachment

This commit is contained in:
Alexander Piskun 2022-10-29 15:09:33 +03:00
parent 48d57d3a35
commit 61391feb78
4 changed files with 23 additions and 2 deletions

View File

@ -15,7 +15,7 @@ from django.urls import reverse
from django.utils.safestring import mark_safe
try:
from pillow_heif import HeifImageFile, HeifImagePlugin
from pi_heif import HeifImageFile, HeifImagePlugin
except ImportError:
HeifImagePlugin = HeifImageFile = None
@ -29,6 +29,7 @@ from utilities.choices import ColorChoices
from utilities.fields import ColorField, NaturalOrderingField
from .device_components import *
__all__ = (
'Device',
'DeviceRole',

View File

@ -1,11 +1,14 @@
import json
import sys
import uuid
from io import BytesIO
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.core.cache import cache
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.core.validators import ValidationError
from django.db import models
from django.http import HttpResponse
@ -15,6 +18,11 @@ from django.utils.formats import date_format
from rest_framework.utils.encoders import JSONEncoder
import django_rq
try:
from pi_heif import HeifImageFile, HeifImagePlugin
except ImportError:
HeifImagePlugin = HeifImageFile = None
from extras.choices import *
from extras.constants import *
from extras.conditions import ConditionSet
@ -386,6 +394,17 @@ class ImageAttachment(WebhooksMixin, ChangeLoggedModel):
filename = self.image.name.rsplit('/', 1)[-1]
return filename.split('_', 2)[2]
def save(self, *args, **kwargs):
if HeifImagePlugin is not None and self.image:
if isinstance(self.image.file, InMemoryUploadedFile) and isinstance(self.image.file.image, HeifImageFile):
output_stream = BytesIO()
self.image.file.image.save(output_stream, format="JPEG")
output_stream.seek(0)
self.image.name = "%s.jpg" % self.image.file.name.split('.')[0]
self.image.file = InMemoryUploadedFile(output_stream, 'ImageField', self.image.name,
'image/jpeg', sys.getsizeof(output_stream), None)
super().save(*args, **kwargs)
def delete(self, *args, **kwargs):
_name = self.image.name

View File

@ -24,6 +24,7 @@ import django
from django.utils.encoding import force_str
django.utils.encoding.force_text = force_str
#
# Environment setup
#

View File

@ -39,4 +39,4 @@ jsonschema==3.2.0
swagger-spec-validator==2.7.6
# Pillow's plugin for HEIF image format
pillow-heif==0.7.0
pi-heif==0.7.0