首页 文章

通过python在图像上编写复杂的自定义元数据

提问于
浏览
9

我正在寻找将自定义元数据写入图像(主要是jpeg,但也可能是其他人) . 到目前为止,我还没有能够通过PIL做到这一点(我在五号和我无法安装pyexiv)我明白我可以更新一些预定义的标签,但我需要创建自定义字段/标签!可以这样做吗?

这些数据将由用户创建,因此我不知道这些标记是手头的或它们包含的内容 . 我需要允许它们创建标签/子标签,然后为它们写入数据 . 例如,某人可能想要在特定图像上创建此元数据:

Category : Human

Physical :
    skin_type : smooth
    complexion : fair
    eye_color: blue
    beard: yes
    beard_color: brown
    age: mid

Location :
    city: london
    terrain: grass
    buildings: old

我还发现,通过PIL JpegImagePlugin保存jpeg后,所有以前的元数据都会被您无法编辑的新数据覆盖?那是一个错误吗?

干杯,S

1 回答

  • 16

    python pyexiv2 module可以读/写元数据 .

    我认为有一组有效的EXIF标签 . 我不知道如何,或者是否可以创建自己的自定义标签 . 但是,您可以使用Exif.Photo.UserComment标记,并使用JSON填充它:

    import pyexiv2
    import json
    
    metadata = pyexiv2.ImageMetadata(filename)
    metadata.read()
    userdata={'Category':'Human',
              'Physical': {
                  'skin_type':'smooth',
                  'complexion':'fair'
                  },
              'Location': {
                  'city': 'london'
                  }
              }
    metadata['Exif.Photo.UserComment']=json.dumps(userdata)
    metadata.write()
    

    读回来:

    import pprint
    filename='/tmp/image.jpg'
    metadata = pyexiv2.ImageMetadata(filename)
    metadata.read()
    userdata=json.loads(metadata['Exif.Photo.UserComment'].value)
    pprint.pprint(userdata)
    

    产量

    {u'Category': u'Human',
     u'Location': {u'city': u'london'},
     u'Physical': {u'complexion': u'fair', u'skin_type': u'smooth'}}
    

相关问题