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)
Вернуться на верх