我正在使用exiv2来操作 jpeg 文件中的元数据。我需要将更多与图像处理相关的信息写入元数据。除了标准标签之外,是否可以创建自定义 Exif 标签?
4 回答
来自http://www.exif.org/Exif2-2.PDF:
D. 与用户信息相关的标签
MakerNote
Exif 写入器制造商用于记录任何所需信息的标签。内容由制造商决定,但此标签不得用于其预期目的以外的任何用途。
标签 = 37500 (927C.H)
类型 = 未定义
计数 = 任意
默认值 = 无UserComment
一个标签,Exif 用户可以在 ImageDescription 之外的图片上写关键字或评论,没有 ImageDescription 标签的字符代码限制。
标签 = 37510 (9286.H)
类型 = 未定义
计数 = 任意
默认值 = 无
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
拥有自定义元数据的更好方法是使用带有自定义命名空间的 Adobe XMP。
根据我的研究,EXIF 标签符合此处描述的一组标准标签。
在它声明的标准文档中(参考 EXIF 标签),
注册系统用于字符代码以避免重复。注册字符代码时,在参考栏中显示标准文档以指示字符格式规范。如果使用在日本没有明确规范的字符代码,如 Shift-JIS,则指定为 Undefined。
因此,我的理解是有一组标准的标签(已注册的标签),否则当您使用 exiftool 等工具查询它时,它会显示为“未定义”。
因此,为了拥有可被工具或其他实体识别的标签,您需要注册您的标签以成为标准化标签的一部分。
我确实找到了一种使用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