将文件元数据存储在额外文件中

3 投票
4 回答
727 浏览
提问于 2025-04-16 14:57

我有一堆图片文件(大多数是 .jpg 格式)。我想存储一些关于这些文件的额外信息,比如主色调、颜色分布、最大梯度流场、兴趣点等等。这些信息并不是固定的,也并不是所有的图片都有。

目前,我是把每个文件的额外信息存储为一个单独的文件,文件名和原文件一样,但扩展名不同。格式就是简单的文本:

metadataFieldName1 metadataFieldValue1
metadataFieldName2 metadataFieldValue2

这让我在想,有没有更好或者更简单的方法来存储这些额外信息?我考虑过使用 ProtocolBuffer,因为我需要在 C++ 和 Python 中都能读取和写入这些信息。但是,怎么处理那些没有的额外信息呢?

4 个回答

1

为什么要用协议缓冲区,而不是用XML、INI文件或者其他类似文本的格式呢?随便选一种格式不就行了吗...

你说的“元数据不可用”是什么意思?这应该是你的应用程序来处理这种错误情况...这跟存储格式有什么关系呢?

2

我建议你把这些元数据直接存储在图片文件里。

大多数图片格式都支持存储元数据。我记得 .jpeg 格式是通过 Exif 来实现的。

如果你使用的是Windows系统,可以用WIC来统一存储和提取元数据,具体可以参考这个链接:统一方式

0

我考虑了很久这个问题,最后选择用ProtocolBuffer来存储我的图片元数据。比如说,对于每张图片Image00012.jpg,我会把元数据存储在Image00012.jpg.pbmd这个文件里。一旦我设置好了.proto文件,Python和C++的类就会自动生成。这种方法效果很好,让我在解析数据时花的时间很少(比起自己写代码去读取YAML文件,明显要好得多)。

RestRisiko提到了一个很好的观点,就是我该如何处理那些没有的元数据。ProtocolBuffer的一个好处是它支持可选和必填字段,这样就解决了我在这方面的问题。

我认为XML和INI不适合这个用途的原因是,因为我的很多元数据比较复杂(比如颜色分布等),需要一些存储上的定制。ProtocolBuffer让我可以嵌套定义数据结构。而且,元数据文件的大小和解析速度明显比我自己手动写的XML读取/写入要好。

撰写回答