【问题标题】:How to insert any amount of metadata into a jpeg?如何将任意数量的元数据插入到 jpeg 中?
【发布时间】:2016-04-22 03:42:41
【问题描述】:

我希望能够将大量元数据写入 jpeg,但 .NET 正在与我作斗争。我到了我想知道自己修改字节是否更容易的地步。没有image.Metadata.Comment = "My comment";,我找不到任何可以为你做的项目(See this answer),微软的文档是confusing,另一个 StackOverflow 帖子导致了this 文章,当你读到最后你会发现它没有向您展示如何实际编写元数据,并且 John P 的 this 代码有效,但如果您尝试添加大量字符,则会收到错误 System.IO.FileFormatException: Commit unsuccessful because too much metadata changed.

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

【问题讨论】:

  • 有趣,我确信标准会指定 EXIF 字段大小的限制,但找不到任何东西 here
  • 很好的发现。 looks like 你可以存储任意数量的数据,但你必须使用一些技巧。
  • 您不能在 JPEG 中存储任何数量的数据,除非为它定义一些语法。 COM 和 APP 标记有一个 2 字节长度的字段。

标签: c# jpeg exif


【解决方案1】:

你没有说你想写什么类型的元数据。但从您的问题来看,您好像正在将大字符串写入 JPEG 评论部分。

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

您可以将 cmets 存储在自己的段中,即所谓的COM 段中。

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

一些讨论here

至于如何在 C# 中执行此操作,我不知道有任何库支持此操作。我为 .NETJava 编写和维护 MetadataExtractor,但顾名思义,这完全是关于读取元数据,而不是写入元数据。

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

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多