Получить EXIF-данные из ImageField Django 2.0 - PullRequest
0 голосов
/ 17 октября 2018

Я занимаюсь извлечением exif-данных фотографии, загруженной через DJANGO 2.1.2,

Вот мой model.py

ОБНОВЛЕННАЯ МОДЕЛЬ:

class UploadedImage(models.Model):
    image = models.ImageField(
        "Uploaded image", upload_to=scramble_uploaded_filename, height_field='height', width_field='width')
    uploaded_at = models.DateTimeField(default=timezone.now)
    width = models.PositiveIntegerField(editable = False)
    height = models.PositiveIntegerField(editable = False ) 
    camera = models.CharField(max_length=10, editable = False)
    latitud = models.CharField(max_length=20, editable = False)
    longitud = models.CharField(max_length=20, editable = False)
    meta = ExifField(
        source='image',
        denormalized_fields={
            'camera': exifgetter('Model'),
            'latitud': exifgetter('GPSLatitude'),
            'longitud': exifgetter('GPSLongitude'),
        },
    )

Несколько советов о том, как работать с этой моделью, с радостью помогут.

1 Ответ

0 голосов
/ 19 октября 2018

Мне также требовалась информация EXIF ​​из изображений, и я не мог найти для этого хорошего решения.Вот почему я разработал поле для Django, которое извлекает информацию EXIF ​​с помощью exiftool и сохраняет их в базе данных: django-exiffield .

Простая установка django-exiffield, убедитесь, что exiftool установлен и добавьте новое поле в вашу модель:

from exiffield.fields import ExifField


class UploadedImage(models.Model):
    image = models.ImageField(
        "Uploaded image", upload_to=scramble_uploaded_filename, 
    exif = ExifField(
        source='image',
    )

Поскольку ExifField используется JSONField для внутреннего использования, вы можете получить доступ к отдельным значениям, используя соответствующую клавишуНапример, print(image.exif['Model']).

Если вам нужно отфильтровать ваше изображение по определенным значениям EXIF ​​или вам нужен очень частый доступ к некоторым из них, имеет смысл денормализовать их.Модуль предоставляет простой способ сделать это, например.денормализуйте модель камеры:

from exiffield.fields import ExifField
from exiffield.getters import exifgetter


class UploadedImage(models.Model):
    image = models.ImageField()
    camera = models.CharField(
        editable=False,
        max_length=100,
    )
    exif = ExifField(
        source='image',
        denormalized_fields={
            'camera': exifgetter('Model'),
        },
    )

Более подробную информацию о модуле вы можете найти в readme .

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать, и если естьесть какие-либо проблемы с модулем, пожалуйста, откройте проблему в репозитории GitHub!

...