【问题标题】:Get EXIF Data from ImageField Django 2.0从 ImageField Django 2.0 获取 EXIF 数据
【发布时间】:2019-03-22 09:06:13
【问题描述】:

我的任务是提取通过 DJANGO 2.1.2 上传的照片的 exif 数据,

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

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

【问题讨论】:

  • 你能显示完整的回溯吗?似乎与 get_exif 方法本身无关。

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


【解决方案1】:

我还需要图像中的 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 存储库中打开问题!

【讨论】:

  • 几个问题,我试图获取 5 个 exif 字段,我指定了字段,但它返回所有 exif 字段以及我定义的字段¿如何获得我想要的那些?另一方面,我试图获取纬度和经度 num 值,可以这样做吗?它只是给了我 val 值,
  • 您能否提供一些代码并告诉我您尝试访问/使用哪些字段?一般来说,ExifField 总是存储所有的 exif 信息,这些信息是由exiftool 提取的。如果您只需要某些字段,我建议将它们作为单独的字段存储在模型上(请参阅denormalized)。您只需要知道exif值的名称,并添加相应的定义和字段即可。
  • 我用我正在处理的实际代码更新了问题,正如我所说,当我看到返回的 exif 数据的结果时,它给我带来了所有字段以及我在模型中定义的字段跨度>
  • 如何访问 EXIF 值。
  • @Louis 为了能够使用django-exiffield,您需要安装exiftool 本身:exiftool.org。安装说明可能因您的操作系统而异。如果您使用的是 ubuntu,您只需运行以下命令即可安装它:sudo apt-get install exiftool
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 2018-10-03
  • 2012-04-03
  • 2023-03-10
  • 2018-10-16
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多