В Django есть несколько способов обрезать изображение перед его сохранением в базе данных. Один из самых простых способов - использовать библиотеку Pillow, которая предоставляет удобные инструменты для работы с изображениями.
Вот пример кода, который показывает, как обрезать изображение при сохранении модели:
from django.db import models from PIL import Image class MyModel(models.Model): image = models.ImageField(upload_to='images/') def save(self, *args, **kwargs): super().save(*args, **kwargs) # Открыть изображение с помощью Pillow img = Image.open(self.image.path) # Определить размеры, до которых нужно обрезать изображение desired_width = 500 desired_height = 500 # Получить текущие размеры изображения current_width, current_height = img.size # Вычислить коэффициент масштабирования для обрезки изображения width_ratio = desired_width / current_width height_ratio = desired_height / current_height # Если изображение слишком широкое, обрезать его по ширине if width_ratio < height_ratio: new_width = desired_width new_height = int(current_height * width_ratio) # Если изображение слишком высокое, обрезать его по высоте else: new_width = int(current_width * height_ratio) new_height = desired_height # Масштабировать изображение до нужных размеров img = img.resize((new_width, new_height), Image.ANTIALIAS) # Обрезать изображение до нужных размеров, если оно слишком большое left = (new_width - desired_width) / 2 top = (new_height - desired_height) / 2 right = (new_width + desired_width) / 2 bottom = (new_height + desired_height) / 2 img = img.crop((left, top, right, bottom)) # Сохранить изображение обратно на диск img.save(self.image.path)
В этом примере мы переопределили метод save
модели MyModel
, чтобы обрезать изображение перед его сохранением. При сохранении модели, код открывает изображение с помощью Pillow, определяет его текущие размеры и вычисляет коэффициент масштабирования, чтобы привести его к нужным размерам. Затем изображение масштабируется и обрезается до заданных размеров, и сохраняется обратно на диск.
Важно запомнить, что при использовании этого подхода вам также понадобится установить библиотеку Pillow с помощью pip install pillow
.