Django, сохраняйте только увеличенное изображение, а не оригинал
В моем проекте Django есть такая модель:
class Image(models.Model):
image = ...
def save(self, *args, **kwargs):
... # resizing and saving the image
super().save(*args, **kwargs)
Простая модель с ImageField. Мне интересно, как сохранить только измененное изображение. Как я знаю "super().save(*args, **kwargs)" сохраняет исходное изображение с его оригинальными размерами. Но это занимает слишком много времени, чтобы сохранить, например, фотографию размером 10-15 МБ. В моей логике изменения размера изображение сжимается и уменьшается до 1-3 МБ. И я хочу сохранить в корне MEDIA только это уменьшенное изображение, а не оригинальное. Я не хочу, чтобы оригинальное изображение вообще появлялось в моем проекте (обработка этого изображения при сохранении занимает слишком много времени). Как избежать "super().save(*args, **kwargs)"?
Надеюсь, вы поняли, заранее спасибо! Любые предложения приветствуются!
Вместо того чтобы избегать super().save(*args, **kwargs), вы можете использовать его. Тогда все ваши изображения будут изменены по размеру и сохранены так, как вы хотите. Вы можете изменить логику примера так, как вам нужно.
pip install Pillow
внутри вашей модели изображения:
def save(self, *args, **kwargs):
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
super().save(*args, **kwargs)