14

给定用户上传的图像,我需要创建它的各种缩略图以显示在网站上。我正在使用 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/>');
}
4

3 回答 3

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

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

于 2010-10-10T10:28:56.477 回答
4

为了进一步最小化图像大小,您应该删除所有元数据。ImageMagick 可以通过-strip在命令行中添加一个来做到这一点。

您是否还考虑过将缩略图作为内联-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
于 2012-08-22T18:48:21.280 回答
2

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

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

于 2014-05-17T11:07:39.930 回答