Измерить высоту и ширину изображения в django и сохранить значение в модели
У меня есть модель для url изображений в django. Я хочу вычислить image_height и iamge_width изображения, которое хранится в s3 bucket.Below is my model.py
from django.db import models
from .project_model import Project
class Image(models.Model):
image = models.TextField(blank=False)
image_width = models.IntegerField(default=0)
image_height = models.IntegerField(default=0)
project_id = models.ForeignKey(Project, on_delete=models.CASCADE)
is_thumpnail = models.BooleanField(blank=False)
upload_on = models.DateTimeField("created on", auto_now_add=True)
updated_on = models.DateTimeField("updated on", auto_now=True)
def __str__(self):
return self.file_name
После получения значений высоты и ширины я хочу сохранить их в model.py.
Я ищу пример ответа следующего типа
{
"id": "cJ9cm",
"title": null,
"description": null,
"datetime": 1357856330,
"type": "image/jpeg",
"animated": false,
"width": 2592,
"height": 1944,
"size": 544702,
"views": 31829,
"bandwidth": 17337319958,
"link": "https://i.imgur.com/cJ9cm.jpg"
}
Если у вас нет изображения, я не уверен, как вы можете сделать это, если у вас есть изображение, это выглядит так в Pillow:
from PIL import Image
im = Image.open('some_image.png')
width, height = im.size
Кроме того, мне интересно, как вы создаете эти экземпляры моделей? Если вы используете лямбда-функцию, которая запускается s3, вы можете создать эти экземпляры с информацией об изображении довольно легко, в этой лямбда-функции вы можете вызвать ваш бэкенд и передать необходимые поля.
Вы можете использовать boto3 для получения изображения из s3 btw, это должно быть более простым способом. Также, возможно, использование поля изображения может быть лучше для вашего случая: docs
вам нужно настроить хранилища, как объяснено здесь
После установки этих зависимостей вы можете получить изображение с s3, boto3 имеет все необходимые функции. Создайте клиент для работы с s3
import boto3
s3_client = boto3.client(
's3',
aws_access_key_id="",
aws_secret_access_key="",
region_name="",
)