将文件元数据存储在额外文件中
我有一堆图片文件(大多数是 .jpg 格式)。我想存储一些关于这些文件的额外信息,比如主色调、颜色分布、最大梯度流场、兴趣点等等。这些信息并不是固定的,也并不是所有的图片都有。
目前,我是把每个文件的额外信息存储为一个单独的文件,文件名和原文件一样,但扩展名不同。格式就是简单的文本:
metadataFieldName1 metadataFieldValue1
metadataFieldName2 metadataFieldValue2
这让我在想,有没有更好或者更简单的方法来存储这些额外信息?我考虑过使用 ProtocolBuffer,因为我需要在 C++ 和 Python 中都能读取和写入这些信息。但是,怎么处理那些没有的额外信息呢?
4 个回答
1
为什么要用协议缓冲区,而不是用XML、INI文件或者其他类似文本的格式呢?随便选一种格式不就行了吗...
你说的“元数据不可用”是什么意思?这应该是你的应用程序来处理这种错误情况...这跟存储格式有什么关系呢?
0
我考虑了很久这个问题,最后选择用ProtocolBuffer来存储我的图片元数据。比如说,对于每张图片Image00012.jpg,我会把元数据存储在Image00012.jpg.pbmd这个文件里。一旦我设置好了.proto文件,Python和C++的类就会自动生成。这种方法效果很好,让我在解析数据时花的时间很少(比起自己写代码去读取YAML文件,明显要好得多)。
RestRisiko提到了一个很好的观点,就是我该如何处理那些没有的元数据。ProtocolBuffer的一个好处是它支持可选和必填字段,这样就解决了我在这方面的问题。
我认为XML和INI不适合这个用途的原因是,因为我的很多元数据比较复杂(比如颜色分布等),需要一些存储上的定制。ProtocolBuffer让我可以嵌套定义数据结构。而且,元数据文件的大小和解析速度明显比我自己手动写的XML读取/写入要好。