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

View File

@ -1,11 +1,14 @@
import json import json
import sys
import uuid import uuid
from io import BytesIO
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.cache import cache from django.core.cache import cache
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.core.validators import ValidationError from django.core.validators import ValidationError
from django.db import models from django.db import models
from django.http import HttpResponse from django.http import HttpResponse
@ -15,6 +18,11 @@ from django.utils.formats import date_format
from rest_framework.utils.encoders import JSONEncoder from rest_framework.utils.encoders import JSONEncoder
import django_rq import django_rq
try:
from pi_heif import HeifImageFile, HeifImagePlugin
except ImportError:
HeifImagePlugin = HeifImageFile = None
from extras.choices import * from extras.choices import *
from extras.constants import * from extras.constants import *
from extras.conditions import ConditionSet from extras.conditions import ConditionSet
@ -386,6 +394,17 @@ class ImageAttachment(WebhooksMixin, ChangeLoggedModel):
filename = self.image.name.rsplit('/', 1)[-1] filename = self.image.name.rsplit('/', 1)[-1]
return filename.split('_', 2)[2] 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): def delete(self, *args, **kwargs):
_name = self.image.name _name = self.image.name

View File

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

View File

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