Получение изображения и обрезка перед сохранением django

Я использую django. У меня есть код, который анализирует HTML код и пытается получить и сохранить изображение в базе данных. Вот код:

link = content[content.find(
                    'src=')+5:content.find('alt')-2]
                img_data = requests.get(link).content
                with open('temp_image.jpg', 'wb') as handler:
                    handler.write(img_data)
                with open('temp_image.jpg', 'rb') as handler:
                    file_name = link.split("/")[-1]
                    post.cover.save(file_name, files.File(handler))
                os.remove("temp_image.jpg")

Но мне также нужно обрезать изображение. Как я могу это сделать? Спасибо.

Добавьте метод сохранения к вашей базе данных в models.py. Ниже я добавил пример, который обрезает изображение и сохраняет обрезанный файл. Этот пример обрезает изображение, но сохраняет соотношение сторон, где короткая сторона составляет 200 пикселей. Измените desired_height, если вам нужно больше или меньше.

Используя библиотеку Pillow, вы можете выполнять все виды обработки изображений методом сохранения вашей модели, включая сложное кадрирование. Pillow - это золотой стандарт для обработки изображений в Python.

pip install Pillow

Подробнее об API Pillow можно прочитать в документации.

Пример работы:

Ниже приведен рабочий пример переопределенного метода сохранения модели Django, который вырезает самый большой центральный квадрат из изображения, независимо от размеров, а затем изменяет размер этого квадрата до 200 x 200 пикселей.

Я написал это как простой способ обработки фотографий логотипа или профиля, где изображение или лицо находится в центре изображения. При обрезке важно учитывать различные сценарии, возникающие, когда ваш входной файл портретный или альбомный, или квадратный, поэтому я и включил этот пример. Безразличное отношение к каждому из них может привести к нежелательному разрешению некоторых изображений.

Дополнительный забавный факт:

Если вам интересно, как работает метод Пиллоу Image.ANTIALIAS или Image.LANCZOS, ознакомьтесь с увлекательным алгоритмом Ланцоша , который используется для понижения дискретизации изображений при изменении размера, но сохранения их визуальной информации.

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