[英]Where exactly is the “metadata” boundary in a JPEG raw blob?
我了解JPEG图像中有许多类型的“元数据”:
http://fotoforensics.com/tutorial-meta.php
但是我必须在哪里切割字节数组以将Blob拆分为常规元数据部分和其余实际图像数据部分?
我想保留所有元数据,调整图像大小,然后再次添加以前存储的元数据。
魔术分隔符字节序列或位置是什么?
谢谢
简短的答案是“取决于...” :)
这里有几件事情要考虑:
我不是这些格式的专家,但不幸的是,我认为答案比您希望的要复杂得多。 如果要读取所有非图像数据信息,则确实需要解析整个图像文件。 好消息是,我确定必须有库来执行此操作(尽管我不了解JS库)。
简而言之,这太过简单了,但这只是为了让您了解需要研究的内容
-编辑-一些参考:
http://zh.wikibooks.org/wiki/JPEG_-_Idea_and_Practice/The_header_part
http://en.wikipedia.org/wiki/JPEG#JPEG_files
我回应清理一些事情。 JPEG标准无法实现。 例如,它定义了如何对组件进行编码和解码,但没有定义组件是什么。 JFIF是填补空白的第一种常用的JPEG文件格式。
如果我们将元数据定义为解码压缩图像不需要的所有描述性数据; 数据和元数据之间有一个相当清晰的界限。 大多数情况下,任何APPn或COM标记都是元数据。
我说的主要是因为仅存在JFIF APP0标记就告诉解码器图像是灰度图像或YCbCr格式,未经伽玛校正。 实际上,JFIF中的元数据很少(缩略图,像素密度)。
JFIF和EXIF流的结构仅在定义格式的APPn标记的格式上有所不同。 由于APPn标记包含一个长度,因此解码器可以跳过标记而无需读取任何元数据。 换句话说,JPEG解码器仅真正需要知道它遇到了JFIF APP0标记或EXIF APP1标记即可解码图像,而无需读取这些标记中的数据。
与JFIF相比,EXIF的更大复杂性仅发生在APPn标记中。 同样,解码器可以通过简单地跳过标记来忽略这种复杂性。
JFIF要求流以SOI标记开始,然后是APP1 JFIF标记。 之后,您可以按任意顺序包含所需的任何APPn或COM标记。 唯一的限制是标记数据不能以JFIF或JFXX开头。
JFIF APP0标记中没有任何内容链接到压缩数据。 EXIF并非如此。 您可以在APP1标记中对图像大小进行编码,而在SOF标记中也对图像大小进行编码。 我不知道如果这些价值观不同,会发生什么。 解码器可能会使用SOF标记中的值,而忽略APP1标记中的值。 但是,某些应用程序可能不喜欢不同的值。
标记级别的JPEG流的结构非常简单。 EXIF标头过于复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.