自定义Exif标签

18

我正在使用exiv2来处理jpeg文件的元数据。我需要将与图像处理相关的更多信息写入元数据中。是否可以创建除标准标签之外的自定义Exif标签?

4个回答

17

来自 http://www.exif.org/Exif2-2.PDF:

D. 与用户信息相关的标签

MakerNote
供Exif写入器制造商记录任何所需信息的标签。内容取决于制造商,但此标签不应用于除其预期用途之外的任何其他用途。
标签 = 37500 (927C.H)
类型 = UNDEFINED
计数 = 任何
默认值 = 无

UserComment
Exif用户为图像编写关键字或评论的标签,除了ImageDescription中的内容之外,并且没有ImageDescription标签的字符代码限制。
标签 = 37510 (9286.H)
类型 = UNDEFINED
计数 = 任何
默认值 = 无

exiv2支持MakerNote标签: http://dev.exiv2.org/projects/exiv2/wiki/How_to_add_support_for_a_new_makernote

如果您不想这样做,您可以使用UserComment: http://www.exiv2.org/doc/exifcomment_8cpp-example.html


9
谢谢Peter。但是我真正想知道的是是否可以定义一个“自定义标签”,而不是标准标签。 - Senan
使用JSON、YAML、CSV等编码您的数据并将Blob存储在上述标记中可能更安全。这样做还可以在元数据更改时提供更多的灵活性。 - Clint Pachl
如果使用MakerNote作为数据存储,可能需要注意。根据Exiv2开发人员关于该制造商标签的说明,他们指出:“任何更改Exif标签的操作都会移动makernote字段并导致其损坏。” - Clint Pachl

3
根据我的研究,EXIF标签符合一组标准标签,如此处所述。
在标准文档中,它声明(针对EXIF标签):
“使用注册系统来避免字符代码重复。当注册字符代码时,在参考列中指定标准文档以指示字符格式规范。如果使用一个没有明确规范的字符代码,例如日本的Shift-JIS,则指定为未定义。”
因此,我理解存在一组标准标签(已注册的标签),否则,当您使用诸如exiftool之类的工具进行查询时,它将显示为“未定义”。
因此,为了拥有可被工具或其他实体识别的标签,您需要注册您的标签,使其成为标准化标签的一部分。

这也反映在常见问题解答中。 - starfry
这似乎是在谈论字符编码,而不是自定义的EXIF字段。 - hippietrail

3

使用带有自定义命名空间的Adobe XMP是拥有自定义元数据的更好方法。


1
我找到了一个使用ExifTool为文件添加自定义EXIF标签的方法。
我需要创建一个配置文件来指定所需的字段:
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Exif::Main' => {
    0xd001 => {
        Name => 'Category',
        Writable => 'string',
        WriteGroup => 'IFD0',
    },
    0xd002 => {
        Name => 'PhotoID',
        Writable => 'string',
        WriteGroup => 'IFD0',
    },
    # add more user-defined EXIF tags here...
  },
);

然后您可以使用exiftool编写字段:
exiftool -config exif.config -EXIF:PhotoID=15 -EXIF:Category=Cars c:\temp\pic.png

阅读EXIF信息:

exiftool -config exif.config c:\temp\pic.png

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接