如何在C++中将EXIF标签嵌入JPG图片的原始缓冲区?

5

我有点问题。

我从相机获得了一个原始的char*缓冲区,我需要添加这些标记才能将其保存到磁盘上。将文件写入磁盘并再次读取不是一个选项,因为这将会发生成千上万次。

我从相机接收到的缓冲数据不包含任何EXIF信息,除了宽度、高度和每英寸像素数。

有什么想法吗?(C++)


请查看XMP元数据工具包(Adobe,但有些开源),特别是XMPFiles... - Frank N
4个回答

4

请查看这份PDF文档,第20页有一张图表,展示了如何放置或修改您的exif信息。与磁盘上的文件有什么不同?

您相机的JPEG缓冲区是否已包含EXIF部分?


不,相机的JPEG缓冲区不包含EXIF部分。 - Hannes
谢谢。这很有帮助...它与JFIF标准不同。 - Hannes

1

有什么区别吗?为什么在磁盘上对文件进行操作会与在内存中进行操作有所不同?

从磁盘读取文件后,只需执行您通常执行的操作即可。


1
据我所知,JPEG中的EXIF数据是文件的连续子部分。
因此:
  1. 准备内存中的EXIF数据
  2. 将JPEG文件的一部分写入EXIF
  3. 写入准备好的EXIF
  4. 写入JPEG文件的其余部分

1

你可能想要查看Exiv2库。我知道它可以处理文件,但我认为它也有处理内存缓冲区的功能。


请注意,Exiv2 在商业使用时不是免费的。 - Yoav
这实际上是一个可怕的误解。Exiv2是双重许可证GPL和商业许可证。GPL有其要求 - 是的 - 但并不禁止您在商业产品中使用它。 - Marcin Gil
抱歉。如果我不修改Exiv2源文件(但从我的源文件中包含其头文件并链接到其源文件),那么将Exiv2用作商业产品的一部分是否可以接受? - Yoav
你的商业产品必须是开源的并且使用GPL许可证。这是限制条件。但实际上没有人禁止你从中获利。因此,我对误解发表了评论。否则,你可以购买商业许可证。 - Marcin Gil
所以它不是免费的。您需要通过在特定许可下使您的产品成为开源来付款。 我仍然认为声称Exiv2对商业产品免费是误导性的(因为对于大多数商业产品而言并非免费)。 - Yoav

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