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

KAr*_*ves 4 jpeg adobe-photoshop adobe-bridge

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

小智 7

如果您使用的是 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


fix*_*234 5

一些简单的方法:

  1. ImageMagick — 在命令行上运行:
    identify -verbose mystery.jpg | grep Interlace
    输出将是“Interlace:JPEG”或“Interlace:None”。
  2. Photoshop — 打开文件。选择File -> Save for Web & Devices
    如果是渐进式 jpeg,则将选中渐进式复选框。
  3. 任何浏览器——基线 jpegs 会从上到下加载,渐进式 jpegs 会做其他事情。如果文件加载太快,您可能需要添加带宽限制。我在 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
Run Code Online (Sandbox Code Playgroud)

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

更新

情节变厚(感谢用户 PussInBoots 提醒我深入挖掘)。该问题询问如何判断 JPEG 是否保存为渐进式。

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

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

    • InageMagick: 隔行扫描参数读取为“JPEG”而不是“无”。

    • Photoshop: 我唯一可用的 Photoshop 版本是古老的(7.0 版)。在 Save for Web 对话框中,Progressive已针对这些文件预先选中该框,但未针对标准 JPEG 预先选中该框。

    • 浏览器: 我的系统和 Internet 连接速度太快,无法进行有用的测试。在正常情况下,一切都足够接近瞬时,无法可靠地区分任何差异。

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

  • 所以对于最初的问题,如果上面的任何测试表明该文件不是渐进式 JPEG,您可以相信它不是。但是,上面的“简单方法”似乎无法可靠地区分真正的渐进式 JPEG 和“虚假”的 JPEG,因此您不能依靠它们来了解 JPEG是否真的是渐进式的。实际上,PussInBoots 在评论中报告说 Photoshop CS6 似乎有一个默认选择为“渐进式”,因此它的初始设置不会告诉您有关现有文件的任何信息。