从不带 0xFF 0xC0 的 jpeg 获取宽度和高度
Get width and height from jpeg without 0xFF 0xC0
我正在尝试从 jpeg(在本例中为 Instagram 图片)获取文件尺寸(宽度和高度)
据我了解,宽度和高度是在 0xFF 0xC0 标记之后定义的,但是我在这张图片中找不到这个标记。它是否已被剥离或是否有我应该检查的替代标记?
您可以使用 ImageMagick 在命令行中非常简单地获取它,它安装在大多数 Linux 发行版上并且可用于 OSX 和 Windows。
identify -ping https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/11264864_1701024620182742_1335691074_n.jpg
输出
https://scontent.cdninstagram.com/t51....1074_n.jpg JPEG 640x640 640x640+0+0 8-bit sRGB 162KB 0.000u 0:00.000
JPEG 帧起始 (SOF) 标记有 4 个可能的值:
- FFC0(基线)- 这是为照片选择的常用模式,并根据所选的 color/subsample 选项
对分组中完全指定的 DCT 块进行编码
- FFC1(扩展)- 这类似于基线,但多于 8 位
每个颜色刺激
- FFC2(渐进式)- 这种模式经常出现在网页上,允许图像随着数据的加载而逐渐加载
已收到。图像的每个 "scan" 逐渐定义 DCT 块的更多系数,直到它们被完全定义。随着更多扫描被解码,这有效地提供了越来越多的细节
- FFC3(无损)- 此模式使用简单的霍夫曼编码
对图像进行无损编码。我唯一见过这个用过的地方是
在 16 位灰度 DICOM 医学图像上
如果您正在扫描字节以寻找 FFCx 模式,请注意您可能会在嵌入的缩略图中遇到一个(在 FFE1 Exif 标记内)。要正确找到主图像的 SOFx,您需要遍历 JPEG 标记链。 2 字节长度(big-endian)跟在 2 字节标记之后。要避免的最后一个陷阱是某些 JPEG 编码器会在有效标记之间插入额外的 FF 值。如果你在标记应该出现的地方遇到 FFFF,只需将指针递增 1 个字节,然后重试,直到你找到一个有效的标记。
我正在尝试从 jpeg(在本例中为 Instagram 图片)获取文件尺寸(宽度和高度)
据我了解,宽度和高度是在 0xFF 0xC0 标记之后定义的,但是我在这张图片中找不到这个标记。它是否已被剥离或是否有我应该检查的替代标记?
您可以使用 ImageMagick 在命令行中非常简单地获取它,它安装在大多数 Linux 发行版上并且可用于 OSX 和 Windows。
identify -ping https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/11264864_1701024620182742_1335691074_n.jpg
输出
https://scontent.cdninstagram.com/t51....1074_n.jpg JPEG 640x640 640x640+0+0 8-bit sRGB 162KB 0.000u 0:00.000
JPEG 帧起始 (SOF) 标记有 4 个可能的值:
- FFC0(基线)- 这是为照片选择的常用模式,并根据所选的 color/subsample 选项 对分组中完全指定的 DCT 块进行编码
- FFC1(扩展)- 这类似于基线,但多于 8 位 每个颜色刺激
- FFC2(渐进式)- 这种模式经常出现在网页上,允许图像随着数据的加载而逐渐加载 已收到。图像的每个 "scan" 逐渐定义 DCT 块的更多系数,直到它们被完全定义。随着更多扫描被解码,这有效地提供了越来越多的细节
- FFC3(无损)- 此模式使用简单的霍夫曼编码 对图像进行无损编码。我唯一见过这个用过的地方是 在 16 位灰度 DICOM 医学图像上
如果您正在扫描字节以寻找 FFCx 模式,请注意您可能会在嵌入的缩略图中遇到一个(在 FFE1 Exif 标记内)。要正确找到主图像的 SOFx,您需要遍历 JPEG 标记链。 2 字节长度(big-endian)跟在 2 字节标记之后。要避免的最后一个陷阱是某些 JPEG 编码器会在有效标记之间插入额外的 FF 值。如果你在标记应该出现的地方遇到 FFFF,只需将指针递增 1 个字节,然后重试,直到你找到一个有效的标记。