Подтвердить что ты не робот

Оптимизировать загруженные изображения с помощью php (jpeg)

При запуске скорости страницы в Google Chrome предлагается оптимизировать/сжать изображения. Эти изображения в основном загружаются пользователями, поэтому мне нужно будет оптимизировать их во время загрузки. То, что я нахожу в оптимизации jpeg-изображений с помощью php, похоже на использование следующих функций GD:

getimagesize()
imagecreatefromjpeg()
imagejpeg()

Поскольку я изменяю размеры изображений после загрузки, я уже вынимаю изображение через эти функции, и кроме того, я использую imagecopyresampled() после imagecreatefromjpeg(), чтобы изменить его размер.

Но тогда, Скорость страницы все еще говорит мне, что эти изображения могут быть оптимизированы. Как я могу выполнить эту оптимизацию в php script? Установите качество ниже в imagejpeg() также не имеет значения.

4b9b3361

Ответ 1

Функция imagejpeg - это то, где вы назначаете качество. Если вы уже устанавливаете это значение в соответствующее значение, вы можете сделать еще немного.

Скорость страницы, вероятно, считает, что все изображения выше определенного размера "нуждаются в сжатии", возможно, просто гарантируют, что они все настолько малы, насколько это разумно (с точки зрения высоты/ширины) и сжаты.

Более подробную информацию о скорости страницы вы можете найти и о предложениях сжатия в документах pagespeed http://code.google.com/speed/page-speed/docs/payload.html#CompressImages, в которых описываются некоторые методы/инструменты для сжатия соответствующим образом.

Я также просто прочитал следующее:

Доступны несколько инструментов, которые обеспечивают дальнейшее сжатие без потерь в файлах JPEG и PNG, не влияя на качество изображения. Для JPEG мы рекомендуем jpegtran или jpegoptim (доступно только для Linux, запустите с параметром --strip-all). Для PNG рекомендуется OptiPNG или PNGOUT.

Итак, возможно (если вы действительно хотите придерживаться предложений Google), вы можете использовать PHP exec для запуска одного из этих инструментов в файлах по мере их загрузки.


Для сжатия с помощью php вы делаете следующее (похоже, что вы уже это делаете):

Где $source_url - это изображение, $destination_url - это где сохранить, а $quality - это число от 1 до 100, выбирающее, сколько jpeg-сжатия использовать.

function compressImage($source_url, $destination_url, $quality) {
    $info = getimagesize($source_url);

    if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($source_url);
    elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($source_url);
    elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($source_url);

    //save file
    imagejpeg($image, $destination_url, $quality);

    //return destination file
    return $destination_url;
}

Ответ 2

Восстановленная функция:

function compressImage($source_url, $destination_url, $quality) {

    //$quality :: 0 - 100

    if( $destination_url == NULL || $destination_url == "" ) $destination_url = $source_url;

    $info = getimagesize($source_url);

    if ($info['mime'] == 'image/jpeg' || $info['mime'] == 'image/jpg')
    {
        $image = imagecreatefromjpeg($source_url);
        //save file
        //ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file). The default is the default IJG quality value (about 75).
        imagejpeg($image, $destination_url, $quality);

        //Free up memory
        imagedestroy($image);
    }
    elseif ($info['mime'] == 'image/png')
    {
        $image = imagecreatefrompng($source_url);

        imageAlphaBlending($image, true);
        imageSaveAlpha($image, true);

        /* chang to png quality */
        $png_quality = 9 - round(($quality / 100 ) * 9 );
        imagePng($image, $destination_url, $png_quality);//Compression level: from 0 (no compression) to 9(full compression).
        //Free up memory
        imagedestroy($image);
    }else
        return FALSE;

    return $destination_url;

}

Ответ 3

очень важно оптимизировать ваши изображения. На некоторых платформах CMS есть модули или плагины для подготовки этого процесса. Однако, если вы сами программируете, есть полный учебник по php, расположенный на этой странице https://a1websitepro.com/optimize-images-with-php-in-a-directory-on-your-server/ Вам будет показано, как реализовать imagecreatefromjpeg($SrcImage); и imagecreatefrompng($SrcImage); и imagecreatefromgif($SrcImage); На странице написаны и видео инструкции.