java - JPEG 原始 blob 中的 "metadata"边界到底在哪里?

标签 java javascript c image jpeg

我知道 JPEG 图像中有许多类型的“元数据”:

http://fotoforensics.com/tutorial-meta.php

但是我必须在哪里切割字节数组以将 blob 拆分为通用元数据部分和剩余的实际图像数据部分?

我想保留所有元数据,调整图像大小,然后再次添加之前存储的元数据。

神奇的分隔符字节序列或位置是什么?

谢谢

最佳答案

简短的回答是“这取决于...”:)

这里有几件事情需要考虑:

  1. 严格来说,“jpeg”是实际图像数据的编码,并没有指定我相信你想要的文件格式。常见的文件格式是 JFIF 或 Exif,每种格式都允许不同类型的元数据
  2. JFIF 和 Exif 文件格式在元数据和图像数据之间没有完整、严格的界限。例如,JFIF 文件由许多段组成;几乎所有这些后面都有一定数量的数据。 Exif 更复杂,但遵循相同的原则。例如,有几个标签定义为 APP0...APPn。许多程序/公司使用这些片段来编码某种形式的元数据。每个段标记之后是两个字节的长度字段,后跟最多 64K 的数据(以两个字节的长度字段为界)。
  3. 可以有任意数量的这些字段用于指定元数据
  4. 这些字段在技术上可以出现在文件中的任何位置,尽管它们通常只出现在“图像数据”之前
  5. 术语“图像数据”非常宽松。我相信你所说的“图像数据”实际上也分布在许多不同类型的 segmentation 市场中。举一个简单的例子,有霍夫曼编码表段(以段标记0xFFC4开头)和实际扫描数据段(以段标记0xFFDA开头)。我认为有充分的理由将这些片段都视为“图像数据”

我远不是这些格式的专家,但不幸的是,我认为答案比您希望的要复杂得多。如果你想读取所有的非图像数据信息,你真的需要解析整个图像文件。好消息是我确定必须有库来执行此操作(尽管我不知道 JS 库)。

这过于简单化了,但这只是为了让您了解需要研究的内容

-编辑-一些引用资料:

http://en.wikibooks.org/wiki/JPEG_-_Idea_and_Practice/The_header_part

http://en.wikipedia.org/wiki/JPEG#JPEG_files

The actual JFIF file spec

http://en.wikipedia.org/wiki/Exchangeable_image_file_format

The actual Exif file spec

关于java - JPEG 原始 blob 中的 "metadata"边界到底在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674544/

相关文章:

java - Apache HttpClient javadoc 在哪里可用

java - 鼠标悬停并随后单击菜单项

javascript - 用异步逻辑替换同步 AJAX 逻辑

javascript - 当使用 jQuery 单击项目时,如何从外部 json 文件获取 id 数据并在 url 中显示 id 编号

android - 从 Android 中的 C 文件调用 C++ 函数

c有序链表逻辑错误

c++ - 使用指向函数的指针数组创建结构

java - eclipse 中的 VideoView 无法在手机上播放

java - 是否需要添加一些东西来避免在 Activity 之间切换时发生内存泄漏?

javascript - 在叶子节点上设置点击事件