如何判断 JPEG 是否已保存为渐进式?

如何判断 JPEG 是否已保存为渐进式?

我收到了摄影师发来的一组照片,需要确认 JPEG 未保存为渐进式 JPEG。我有 Adob​​e Bridge 和 Photoshop — 我该如何检查?

答案1

一些简单的方法:

  1. 图像魔术师— 在命令行运行:
    identify -verbose mystery.jpg | grep Interlace
    输出将是“Interlace:JPEG”或“Interlace: None”。
  2. Photoshop— 打开文件。选择File -> Save for Web & Devices
    如果是渐进式 jpeg,则将选中渐进式复选框。
  3. 任何浏览器— 基线 jpeg 会从上到下加载,渐进式 jpeg 则会做其他事情。如果文件加载速度太快,您可能需要添加带宽限制。我在 Mac 上使用 ipfw。

来源

程序化方法

查看检测渐进式 JPEG作者发布了一些人们开发的脚本的链接:

可以使用几个标识字节来识别文件。渐进式 DCT JPEG 可以通过字节“0xFF、0xC2”来识别。此外,渐进式 JPEG 图像通常包含多个扫描,因此您可以查找几个“扫描开始”匹配项(字节:“0xFF、0xDA”)。作者使用了一个简单的 Bash 命令来获得准确的结果:

>grep -c -P “xffxc2″ progressive1.jpg
>1

>grep -c -P “xffxc2″ progressive2.jpg
>1

>grep -c -P “xffxc2″ baseline1.jpg
>0

>grep -c -P “xffxc2″ baseline2.jpg
>0

>grep -c -P “xffxDA” progressive1.jpg
>6

>grep -c -P “xffxDA” progressive2.jpg
>12

该链接还包含许多其他有用的工具。

更新

情节越来越复杂(感谢用户 PussInBoots 提醒我深入挖掘)。问题是如何判断 JPEG 是否已保存作为进步人士。

  • “另存为”似乎具有灵活的含义。我试验后发现,在某些情况下,另存为逐行扫描仅意味着更改了元数据参数(隔行扫描),但文件实际上并未更改为包含逐行扫描。因此,文件包含单个图像,渲染软件被告知将其视为逐行扫描图像。

    这些“虚假”渐进式文件在上述测试中的表现如下:

    • InageMagick: Interlace 参数读取为“JPEG”而不是“None”。

    • Photoshop: 我手头唯一可用的 Photoshop 版本是旧版本(7.0 版)。在“存储为 Web”对话框中,Progressive这些文件上的复选框已预先选中,但标准 JPEG 则未选中。

    • 浏览器: 我的系统和互联网连接速度太快,因此这个测试没有用。在正常情况下,一切都非常接近瞬时,无法可靠地区分任何差异。

    • 识别字节: 这似乎是一个更可靠的指标。“伪造”的渐进式 JPEG 没有任何可识别的字节模式。

  • 因此对于最初的问题,如果上述任何测试表明该文件是不是渐进式 JPEG,您可以相信它不是。但是,上述“简单方法”似乎无法可靠地区分真正的渐进式 JPEG 和“伪造”的 JPEG,因此您不能依赖它们来判断 JPEG确实很先进。事实上,PussInBoots 在评论中报告说,Photoshop CS6 似乎有一个默认选项是“先进”,因此它的初始设置不会告诉您有关现有文件的任何信息。

答案2

如果你使用的是 unix,请使用以下file命令:

$ file image.jpg

image.jpg: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=0], progressive, precision 8, 2000x1200, components 3

答案3

对于后代来说,有一个更简单的方法。只需使用 Irfanview 检查即可。单击图像->信息。

使用 Irfanview 检查 Jpeg 属性

相关内容