python - 从 ImageField Django 2.0 获取 EXIF 数据

标签 python django django-models django-rest-framework exif

我正在执行提取通过 DJANGO 2.1.2 上传的照片的 exif 数据的任务,

这是我的模型.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'),
        },
    )

有关如何使用此模型的一些指导很乐意提供帮助。

最佳答案

我还需要图像中的 EXIF 信息,但找不到一个好的解决方案。这就是为什么我为 Django 开发了一个字段,它使用 exiftool 提取 EXIF 信息。并将它们存储在数据库中: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 值过滤图像或需要经常访问其中的某些值,那么 denormalize 是有意义的。他们。该模块提供了一种简单的方法来做到这一点,例如。对相机模型进行非规范化:

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 存储库中提出问题!

关于python - 从 ImageField Django 2.0 获取 EXIF 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52859052/

相关文章:

python - 导入cv2错误python

python - 如何让 nginx/gunicorn 使用结构化日志记录?

python - 删除带有文件字段的 Django 模型对象是否会删除用于文件的存储空间?

python - Django一对一模型中的更新/编辑功能

django - 在 Django admin 中显示属性 - 翻译它们的名称

python - Scrapy 覆盖 json 文件而不是附加文件

python - 如何退出正在运行的python程序到python提示符?

javascript - chrome 上的 contentType 错误

python - 反转 'password_change_done',参数 '()' 和关键字参数 '{}' 未找到。 0 种模式已尝试 : []

python - Django - def __unicode__(self) 中的语法错误