Измерить высоту и ширину изображения в 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="",
)
Вернуться на верх