如何将任意数量的元数据插入jpeg?

时间:2016-01-16 17:22:51

标签: c# jpeg exif

我希望能够将大量元数据写入jpeg,但.NET正在打击我。我想知道自己修改字节是否更容易。没有image.Metadata.Comment = "My comment";,我找不到任何为您执行此项目的项目(See this answer),Microsoft的文档是confusing,另一个StackOverflow帖子导致this文章,当你走到最后,你发现它并没有告诉你如何实际编写元数据,John P的this代码可以工作,但如果你试图添加一个很多字符都会出现错误System.IO.FileFormatException: Commit unsuccessful because too much metadata changed.

所以几乎没有任何东西可以工作。我想在我的jpeg中添加任意长度的评论。因此,如果jpeg本身是1.3MB,我希望能够添加评论,以便jpeg变为10MB。

1 个答案:

答案 0 :(得分:1)

您不会说出您尝试编写的元数据类型。但是从你的问题来看,听起来好像你正在将大字符串写入JPEG评论部分。

JPEG文件基本上是一个段列表。这些段具有类型标识符(单个字节)和长度(两个字节)。这意味着最长的段长度只能是65535个字节。

您可以在自己的细分中存储评论,即所谓的COM细分。

如果您的评论超过65535字节,则可以在文件中存储多个COM段。读者应该将这些内容连接在一起作为最终评论。

一些讨论here

至于如何在C#中执行此操作,我不知道任何支持此功能的库。我为.NETJava编写并维护了MetadataExtractor,但正如其名称所暗示的那样,所有这些都是关于阅读,而不是编写元数据。

然而,JPEG的容器格式并不太复杂。编写自己的代码并将COM段注入文件并逐字复制所有其他段不应该太复杂。