Изменение размера и преобразование mime-изображения Django

Я пытаюсь изменить размер и конвертировать mime перед сохранением изображения

models.py

class ProductImages(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    image_type = models.CharField(max_length=33,default='image_type')    
    image_file = models.ImageField(
        upload_to=upload_to_path,
        null=True,
        blank=True,
        default='magickhat-profile.jpg'
    )

    def save(self, *args, **kwargs):
        #on update image delete old file
        try:
            this = ProductImages.objects.get(id=self.id)
            if this.image_file != self.image_file:
                this.image_file.delete(save=False)
        except:
            pass 
        super().save(*args, **kwargs)
        image_manipulation(self)

Функция upload_to_path and image_manipulation импортирована from utils.utils import upload_to_path, image_manipulation

utils/utils.py

from PIL import Image
from pathlib import Path

def upload_to_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = instance.product.slug+"_"+str(instance.id)+"."+ext
    return 'user_{0}/{1}/{2}'.format(instance.product.user.id, instance.product.id, filename)

def image_manipulation(self):
    pathx = self.image_file.path
    self.image_file = Image.open(pathx)
    img_x = self.image_file.resize((200,300))
    img_x.save(pathx)

С этим кодом работает, но у меня не получается реализовать этот код для преобразования в png тоже...

Когда я пытаюсь сделать что-то вроде:

def image_manipulation(self):
    pathx = self.image_file.path
    self.image_file = Image.open(pathx)
    img_x = self.image_file.resize((200,300))
    img_rgb = img_x.convert('RGB')
    img_split_ext = pathx.rsplit( ".", 1 )[ 0 ]
    img_rgb.save(img_split_ext+".png")

Когда я сделал это изменение, файл загружается, изменяется в размере и конвертируется, но исходный файл (jpg) тоже загружается. Если возможно, я буду благодарен за небольшое объяснение этого процесса, между вызываемой переменной upload_to, которая принимает 2 параметра (instance, filename) и самим методом save(), потому что с моей точки зрения upload_to касается записи в базе данных, а save() касается хранения в файловой системе...

Видишь ли ты, я запутался

Вернуться на верх