jpeg/jfif图像开始扫描的最后2个字节是什么



正在从我使用Java:创建的JFIF图像中收集信息

Image bmp = ImageIO.read(new File("Background1.png"))
        .getScaledInstance(624, 416, Image.SCALE_SMOOTH);
BufferedImage tmpBufferedImage = new BufferedImage(bmp.getWidth(null), bmp.getHeight(null),
        BufferedImage.TYPE_USHORT_565_RGB);
Graphics2D g = tmpBufferedImage.createGraphics();
g.drawImage(bmp, 0, 0, null);
g.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(tmpBufferedImage, "jpg", baos);
.... Written to file later.

我已经创建了几个图像,除了数据之前,标题都是相同的。下面是一些标题示例。

FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F3 EA
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F7 FA
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 E2 E8
FF D8 FF...FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 F9 FE

随后是压缩数据,并以FF D9结束。

根据我在JPEG/JFIF上读到的所有内容,FF DA之后的所有内容都应该是压缩数据,但为什么00 0C 03 01 00 02 11 03 11 00 3F 00总是出现在每个图像中?另外,如果有人知道的话,最后两个字节是什么?我制作了几个单色图像,所有这些图像都有一个重复的序列,从最后两个字节开始,这让我觉得它们一定是某种标题信息。

问题:这12个字节(0C…00)是什么,尤其是最后2个字节是什么?

更新:所以这些字节被称为扫描开始,我发现了一些文档。00 0C是一个长度(12),当它加上所讨论的剩余字节时,它是有意义的。关于接下来的8个字节左右,还有一些其他信息,但最后一个我仍然不确定。

最后:这是一个兔子洞,但我要留下这个问题,以防有人追同一只兔子。末尾的两个字节是扫描数据的一部分,因为00c显然包含在12个字节的计数中。另一位用户在另一个问题上指出了这一点。

您需要查看SOS标记的布局。

  • FFDA表示SOS标记
  • 00OC是标记长度=12
  • 3=是组件的数量。接下来是分配给扫描的扫描ID、huffman和量化表

然后是压缩的扫描数据。

显然,无论你使用什么编码器,都总是在交错扫描中对彩色图像进行编码(而不是在单独的扫描中对每个组件进行编码)。

FFD9是指示JPEG流的结束的EOI标记。

最新更新