12

这个问题可能是一个“悬而未决的问题”,你们中的许多人可能急于结束它,但请不要。让我解释。

众所周知,JPEG有两种压缩方式(至少在Photoshop保存对话框中)

  • 优化,图像加载有点像逐行
  • 渐进式,其中图像首先像马赛克一样加载,逐渐变好,直到原始分辨率

我以前读过很多 PNG/JPEG 优化文章,但现在我遇到了这种很棒的第三种压缩,来自一个狂野的随机谷歌图片搜索。有问题的JPEG是这个

http://storage.googleapis.com/marc-pres/boston-event-1012/images/google-data-center.jpg

尝试在 Chrome/Firefox 中加载链接(仅在 IE/Safari 中,直到图像完全加载然后显示)

你可以观察到:

  1. 图像首先以黑白方式加载
  2. 然后看起来像加载了红色通道
  3. 接下来加载绿色通道
  4. 最后加载蓝色通道

我尝试使用模拟的非常慢的连接再次加载它,并观察到 ​​JPEG 不仅按通道顺序加载,而且以渐进方式加载。所以首先加载的图像是黑白马赛克然后是绿色马赛克然后逐渐全彩色马赛克最后是全分辨率和全彩色图像。

这是一项了不起的技术,假设您正在构建一个电子杂志,其中每个页面都有很多图片,您希望用户快速翻阅页面,而这种图片正是最好的。为了快速预览,加载空白-n-白色缩略图,如果用户停留,则完全加载原始图像。

所以我的问题是:如何使用 Python Pillow 或 ImageMagick 或任何类型的开源软件生成这样的图像?

如果您认为这个问题不合适,请发表评论,不要直接关闭它。

更新1:

事实证明,谷歌在其所有 JPEG 图片12中都使用了这项技术,例如这个

更新2:我发现了另一个线索

4

1 回答 1

8

JPEG 文件中的图像数据可以通过多种不同的方式进行切片,并且切片(或通常称为“扫描”)可以以多种不同的顺序存储在文件中。

在大多数 JPEG 文件中,文件中的第一次扫描包含图像的所有颜色分量,如果是彩色图像,则交错在一起。在非渐进式 JPEG 中,文件将仅包含一次扫描。在渐进式 JPEG 中,随后会进行其他扫描,每个扫描可能包含一个组件或多个组件。

但是没有什么需要这样做。如果文件中的第一次扫描不包含所有颜色分量,我们可以称这样的文件为“非交错”。

您的示例文件是非交错的,它们也是渐进的。渐进式非交错 JPEG 似乎比非渐进式非交错 JPEG 得到更广泛的支持。

标准的 IJG libjpeg 软件能够创建非交错文件。虽然这并不容易,但您可以使用它的cjpeg实用程序,-scans文件中记录了该选项wizard.txt

于 2013-04-10T17:53:38.243 回答