Google PageSpeed ​​& ImageMagick JPG сжатие - PullRequest
14 голосов
/ 10 октября 2010

Учитывая загруженное пользователем изображение, мне нужно создать различные его эскизы для отображения на веб-сайте. Я использую 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 ]

9 голосов
/ 10 октября 2010
  • JPEG может содержать комментарии, миниатюры или метаданные, которые могут быть удалены.
  • Иногда возможно сжать файлы JPEG больше, сохраняя при этом то же качество.Это возможно, если программа, сгенерировавшая изображение, не использовала оптимальный алгоритм или параметры для сжатия изображения.Путем повторного сжатия тех же данных оптимизатор может уменьшить размер изображения.Это работает с использованием определенных таблиц Хаффмана для сжатия.

Вы можете запустить jpegtran или jpegoptim для созданного файла, чтобы уменьшитьэто дальше по размеру.

4 голосов
/ 22 августа 2012

Чтобы свести к минимуму размеры изображения, вы должны удалить все метаданные. 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
1 голос
/ 17 мая 2014

Google выполняет эти расчеты на основе формата изображения WebP (https://developers.google.com/speed/webp/).

Несмотря на увеличение производительности, в настоящее время он поддерживается только Chrome и Opera (http://caniuse.com/webp)

...