Google PageSpeed& ImageMagick JPG压缩

时间:2010-10-10 10:20:02

标签: image-processing compression imagemagick jpeg pagespeed

鉴于用户上传的图片,我需要创建它的各种缩略图,以便在网站上显示。我正在使用ImageMagick并试图让Google PageSpeed感到高兴。不幸的是,无论我在quality命令中指定了什么convert值,PageSpeed仍然可以建议进一步压缩图像。

请注意http://www.imagemagick.org/script/command-line-options.php?ImageMagick=2khj9jcl1gd12mmiu4lbo9p365#quality提到:

  

对于JPEG ...图像格式,   质量是1 [提供]最低   图像质量和最高压缩   ....

我实际上甚至测试过使用1来压缩图像(虽然它产生了无法使用的图像),而PageSpeed仍然建议我仍然可以通过“无损压缩”图像来优化这种图像。我不知道如何使用ImageMagick压缩图像。 有任何建议吗?

以下是测试我所说内容的快速方法:

assert_options(ASSERT_BAIL, TRUE);

// TODO: specify valid image here
$input_filename = 'Dock.jpg';

assert(file_exists($input_filename));

$qualities = array('100', '75', '50', '25', '1');
$geometries = array('100x100', '250x250', '400x400');

foreach($qualities as $quality)
{
    echo("<h1>$quality</h1>");
    foreach ($geometries as $geometry)
    {
        $output_filename = "$geometry-$quality.jpg";

        $command = "convert -units PixelsPerInch -density 72x72 -quality $quality -resize $geometry $input_filename $output_filename";
        $output  = array();
        $return  = 0;
        exec($command, $output, $return);

        echo('<img src="' . $output_filename . '" />');

        assert(file_exists($output_filename));
        assert($output === array());
        assert($return === 0);
    }

    echo ('<br/>');
}

3 个答案:

答案 0 :(得分:9)

  • JPEG可能包含注释,缩略图或元数据,可以删除。
  • 有时可以更多地压缩JPEG文件,同时保持相同的质量。如果生成图像的程序没有使用最佳算法或参数来压缩图像,则这是可能的。通过重新压缩相同的数据,优化器可以减小图像大小。这可以通过使用specific Huffman tables进行压缩来实现。

您可以在创建的文件上运行jpegtranjpegoptim,以进一步减少它。

答案 1 :(得分:4)

要最大限度地减小图像尺寸,您应该删除所有元数据。 ImageMagick可以通过在命令行中添加-strip来完成此操作。

您是否还考虑将缩略图图像作为inline -d base64编码数据放入HTML?

这可以使您的网页加载更多 (即使尺寸变得更大),因为它可以避免浏览器对所有图片运行多个请求HTML代码中引用的文件(图像)。

此类图片的HTML代码如下所示:

 <IMG SRC="data:image/png;base64,
         iVBORw0KGgoAAAANSUhEUgAAAM4AAABJAQMAAABPZIvnAAAABGdBTUEAALGPC/xh
         BQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAA
         OpgAABdwnLpRPAAAAAZQTFRFAAAA/wAAG/+NIgAAAAF0Uk5TAEDm2GYAAAABYktH
         RACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAB6ElEQVQ4y+3UQY7bIBQG4IeQ
         yqYaLhANV+iyi9FwpS69iGyiLuZYpepF6A1YskC8/uCA7SgZtVI3lcoiivkIxu/9
         MdH/8U+N6el2pk0oFyibWyr1Q3+PlO2NqJV+/BnRPMjcJ9zrfJ/U+zQ9oAvo+QGF
         d+npPqFQn++TXElkrEpEJhAtlTBR6dNHUuzIMhFnEhxAmJDkKxlmt7ATXDDJYcaE
         r4Txqtkl42VYSH+t9KrD9b5nxZeog/LWGVHprGInGWVQUTvjDWXca5KdsowqyGSc
         DrZRlGlQUl4kQwpUjiSS9gI9VdECZhHFQ2I+UE2CHJQfkNxTNKCl0RkURqlLowJK
         1h1p3sjc0CJD39D4BIqD7JvvpH/GAxl2/YSq9mtHSHknga7OKNOHKyEdaFC2Dh1w
         9VSJemBeGuHgMuh24EynK03YM1Lr83OjUle38aVSfTblT424rl4LhdglsUag5RB5
         uBJSJBIiELSzaAeIN0pUlEeZEMeClC4cBuH6mxOlgPjC3uLproUCWfy58WPN/MZR
         86ghc888yNdD0Tj8eAucasl2I5LqX19I7EmEjaYjSb9R/G1SYfQA7ZBuT5H6WwDt
         UAfK1BOJmh/eZnKLeKvZ/vA8qonCpj1h6djfbqvW620Tva36++MXUkNDlFREMVkA
         AAAldEVYdGRhdGU6Y3JlYXRlADIwMTItMDgtMjJUMDg6Mzc6NDUrMDI6MDBTUnmt
         AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEyLTA4LTIyVDA4OjM3OjQ1KzAyOjAwIg/B
         EQAAAA50RVh0bGFiZWwAImdvb2dsZSJdcbX4AAAAAElFTkSuQmCC"
  ALT="google" WIDTH=214  HEIGHT=57  VSPACE=5 HSPACE=5 BORDER=0 />

您可以像这样创建base64编码的图像数据:

base64  -i image.jpg  -o image.b64

答案 2 :(得分:1)

Google会根据其WebP图片格式(https://developers.google.com/speed/webp/)执行这些计算。

尽管提供了性能提升,但目前仅支持chrome和opera(http://caniuse.com/webp