除标准/渐进之外,第三种JPEG压缩:按频道加载?

est*_*est 11 jpeg imagemagick image-processing image-compression python-imaging-library

这个问题可能是一个"开放式问题",很多人可能都渴望关闭它,但请不要.让我解释.

众所周知,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不仅按通道顺序加载,而且以渐进方式加载.因此,首先加载的图像是空白和白色马赛克然后绿色马赛克然后逐渐全彩色马赛克,最后是全分辨率和全彩色图像.

这是一项了不起的技术,假设您正在构建一个电子杂志,每个页面都有很多图片,您希望用户快速翻阅浏览页面,这种图像正是最有效的.要进行快速预览,请加载blank-n-white缩略图,如果用户停留,则完全加载原始图像.

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

如果您认为这个问题不合适,请发表评论,不要只是关闭它.

更新1:

事实证明,谷歌使用该技术在其所有的JPEG图片的1,2

更新2:我找到了另一条线索

小智 7

JPEG文件中的图像数据可以以许多不同的方式切片,并且切片(或通常称为"扫描")可以以许多不同的顺序存储在文件中.

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

但没有什么要求它以这种方式完成.如果文件中的第一次扫描不包含所有颜色分量,我们可能会将此类文件称为"非交错".

您的示例文件是非交错的,它们也是渐进式的.渐进式非交错JPEG似乎比非渐进式非交错JPEG更受支持.

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