Compression 谷歌如何';s页面速度无损图像压缩工作?

Compression 谷歌如何';s页面速度无损图像压缩工作?,compression,imaging,pagespeed,google-pagespeed,Compression,Imaging,Pagespeed,Google Pagespeed,当你在一个网站上运行谷歌Firebug/Firefox的PageSpeed插件时,它会建议一些图像可以无损压缩的情况,并提供一个下载这个较小图像的链接 例如: find /path/to/jpgs/ -type f -name "*.jpg" -exec jpegoptim -m70 --strip-all {} \; 无损压缩可节省33.5KiB(减少85%) 无损压缩可节省18.5KiB(减少77%) 无损压缩可以节省262B(减少11%) 无损压缩可以节省91B(减少51%) 无损压

当你在一个网站上运行谷歌Firebug/Firefox的PageSpeed插件时,它会建议一些图像可以无损压缩的情况,并提供一个下载这个较小图像的链接

例如:

 find /path/to/jpgs/ -type f -name "*.jpg" -exec jpegoptim -m70 --strip-all {} \;
  • 无损压缩可节省33.5KiB(减少85%)
  • 无损压缩可节省18.5KiB(减少77%)
  • 无损压缩可以节省262B(减少11%)
  • 无损压缩可以节省91B(减少51%)
  • 无损压缩可以节省61B(减少5%)
这适用于JPG和PNG文件类型(我没有测试过GIF或其他文件)

还要注意Flickr的缩略图(所有这些图像都是75x75像素)。它们节省了很多钱。如果这真的很好,为什么雅虎不将这个服务器端应用到他们的整个库中,并减少他们的存储和带宽负载

甚至Stackoverflow.com也代表了一些非常小的节约:

  • 无损压缩可以节省1.7KiB(减少10%)
  • 无损压缩可以节省11B(减少1%)
我看到PageSpeed建议在我使用Photoshop的“保存为Web”功能创建的PNG文件上节省相当可观的费用


所以我的问题是,他们对图像做了什么改变来减少这么多?我猜对于不同的文件类型有不同的答案。这对JPGs来说真的是无损的吗?他们怎么能打败Photoshop呢?我应该对此有点怀疑吗?

看看其中描述了一些技术/工具。

这是一个用编码器的CPU时间换取压缩效率的问题。压缩是对较短表示的搜索,如果搜索得更努力,就会找到较短的表示

还有一个问题是要充分利用图像格式功能,例如PNG8+a而不是PNG24+a,JPEG格式的优化哈夫曼表等

Photoshop在为网络保存图像时并没有真正努力做到这一点,所以任何工具都能打败它也就不足为奇了

  • (无损)和
  • (有损)用于较小的PNG文件()和
  • /(有损)用于更好的JPEG压缩程序

如果您真的对技术细节感兴趣,请查看源代码:


对于PNG文件,他们使用OptiPNG,并采用一些尝试和错误的方法

//我们使用这四种组合,因为不同的图像似乎从中受益
//不同的参数以及这4个参数的组合似乎最适用于大型
//来自web的一组PNG。
常量PngCompressParams kPngCompressionParams[]={
PngCompressParams(PNG_所有过滤器,Z_默认策略),
PngCompressParams(PNG_所有过滤器,Z_过滤器),
PngCompressParams(PNG_过滤器_无,Z_默认_策略),
PngCompressParams(PNG_FILTER_NONE,Z_FILTER)
};
当应用所有四种组合时,将保持最小的结果。就这么简单

(注意:如果您通过
-o7
提供
-o2
,则
optipng
命令行工具也会这样做)


对于JPEG文件,它们与以下选项一起使用:

jpeg压缩选项()
:渐进式(假)、保留颜色(假),
保留exif数据(错误),有损(错误){

类似地,使用以下选项压缩WEBP:

WebpConfiguration()
:无损(真)、质量(100)、方法(3)、目标尺寸(0),
alpha_压缩(0)、alpha_滤波(1)、alpha_质量(100){


还有一种用于无损转换为最小格式的格式。

在Windows中复制PageSpeed的JPG压缩结果:

使用Windows版本的jpegtran,我能够获得与PageSpeed完全相同的压缩结果,您可以在。我使用DOS提示符运行可执行文件(使用Start>CMD)。为了获得与PageSpeed压缩完全相同的文件大小(低至字节),我指定了Huffman优化,如下所示:

jpegtran -optimize source_filename.jpg output_filename.jpg
有关压缩选项的更多帮助,请在命令提示下键入:jpegtran

或使用Firebug中PageSpeed选项卡自动生成的图像:

我能够按照彭彭80的建议访问PageSpeed的优化文件。希望屏幕截图能为FireFox环境提供更清晰的信息。(但我无法在Chrome中访问这些优化文件的本地版本。)

要使用Adobe Bridge和正则表达式清理混乱的PageSpeed文件名:

虽然FireFox中的PageSpeed能够为我生成优化的图像文件,但它也改变了它们的名称,将简单的名称改为:

nice_picture.jpg
进入

我发现这似乎是一种常见的抱怨。因为我不想手动重命名所有图片,所以我使用了AdobeBridge的重命名工具和正则表达式。您可以使用其他接受正则表达式的重命名命令/工具,但我怀疑AdobeBridge对于处理PageSpeed问题的大多数人来说都是现成的

  • 启动Adobe Bridge
  • 选择所有文件(使用控件A)
  • 选择工具>批量重命名(或控制移位R)
  • 在预设字段中选择“字符串替换”。新文件名字段现在应显示“字符串替换”,后跟“原始文件名”
  • 启用名为“使用正则表达式”的复选框
  • 在“查找”字段中,输入正则表达式(将选择从最右侧下划线分隔符开始的所有字符):

    \u(?。*)(.*)\.jpg$

  • 在“替换为”字段中,输入:

    .jpg

  • (可选)单击“预览”按钮查看建议的批重命名结果,然后关闭

  • 单击重命名按钮
  • 注意
    find /path/to/jpgs/ -type f -name "*.jpg" -exec jpegoptim --strip-all {} \;
    
     find /path/to/jpgs/ -type f -name "*.jpg" -exec jpegoptim -m70 --strip-all {} \;
    
    find /path/to/pngs/ -type f -name "*.png" -exec optipng -o2 {} \;
    
    sudo apt-get install trimage    
    trimage -d images/*
    
    <?php
        echo "Processing jpegs<br />";
        exec("find /home/example/public_html/images/ -type f -name '*.jpg' -exec jpegoptim --strip-all {} \;");
        echo "Processing pngs<br />";
        exec("find /home/example/public_html/images/ -type f -name '*.png' -exec optipng -o7 {} \;");
    ?>
    
    FOR /F "tokens=*" %G IN ('dir /s /b *.png') DO optipng -nc -nb -o7 -full %G