Изменение размера и преобразование 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()
касается хранения в файловой системе...
Видишь ли ты, я запутался