JPG文件可以通过FF FE标记包含文本注释。我有几个问题:
我如何指定注释的长度?如果评论在文件末尾,是否可能根本不指定长度?
是否可能有一个仅由评论组成而没有图像的有效JPG文件?这样的文件在二进制中看起来像什么?我假设它将是:
FF D8 - SOI:图像开始(注意没有跟随帧数据) FF D9 - EOI:图像结束 FF FE - COM:文本注释 (二进制) - (文本)
JPG文件可以通过FF FE标记包含文本注释。我有几个问题:
我如何指定注释的长度?如果评论在文件末尾,是否可能根本不指定长度?
是否可能有一个仅由评论组成而没有图像的有效JPG文件?这样的文件在二进制中看起来像什么?我假设它将是:
FF D8 - SOI:图像开始(注意没有跟随帧数据) FF D9 - EOI:图像结束 FF FE - COM:文本注释 (二进制) - (文本)
JPEG元数据以以下标签结构存储:
0xFF - 标签引导符
0xXX - 标签值
0xXX 0xXX - 包括长度的大端顺序的标记长度(2)
< 标记数据(长度-2个字节)>
该结构要求每个标签最多可以包含65534个字节的元数据。对于更大的结构,真实长度值存储在标签数据中,并且多个标签包含整个结构。
评论标签的示例。它包括一个零终止符,但这不是必需的。
FF FE 00 08 48 45 4C 4C 4F 00 - “HELLO”
大多数JPEG段包含2字节的标记(在COM的情况下为0xFFFE
),后跟段长度(2字节)。有关更多详细信息,请参见JPEG语法和结构(维基百科)。对于COM标记,您必须指定长度字段。
只有表格(仅DHT和DQT段)的JPEG是有效的,没有图像数据。我不认为没有表格或图像数据的JPEG是有效的,但至少您不需要图像数据。不确定它有多有用,或者大多数JPEG软件如何解释它......
只有表格的JPEG的用例是与“缩写流”一起使用(仅具有图像数据,无表格的JPEG),以共享多个图像之间的公共表格。
FF D8 FF E0 00 10 4A 46 49 46 00 01 02 00 02 80 02 7F 00 00 FF FE 00 08 48 65 6C 6C 6F 21 FF D9
是一堆程序,没有一个以任何方式接受它。许多给出了通用错误,有些说它不是有效的JPEG,而ImageMagick的identify
则表示图像数据不足。有趣的是,如果其中一个带有表格,看看是否会改变什么。 - Ethan ChapmanFFD8FFFE 00084865 6C6C6F21 FFD9
应该就足够了。;-) - Harald K