Функция для конвертирования изображений в WEBP формат на PHP — PROG-TIME

Функция для конвертирования изображений в WEBP формат на PHP

22.11.2022

Конвертация изображений в формат WebP на стороне сервера — важный инструмент оптимизации веб‑сайтов. WebP — современный формат изображений, разработанный Google, который поддерживает как сжатие без потерь, так и с потерями, при этом существенно уменьшая размер файлов по сравнению с классическими форматами JPEG и PNG. Это особенно важно для ускорения загрузки страниц, экономии трафика и улучшения показателей Core Web Vitals.

В PHP есть несколько способов преобразовать изображения в WebP‑формат: с помощью расширения GD, через Imagick (ImageMagick), а также с использованием внешних утилит, таких как cwebp. Правильная функция конвертации должна учитывать исходный тип изображения, обработку альфа‑канала и варианты качества, чтобы добиться оптимального баланса между размером и качеством картинки.

Статья показывает, как реализовать PHP‑функцию, которая:

  • автоматически определяет исходный формат изображения (JPEG, PNG, GIF и др.),
  • корректно обрабатывает прозрачность и цветовые профили,
  • генерирует WebP‑картинку с заданным качеством,
  • сохраняет результат на диск или выводит в браузер,
  • и при необходимости удаляет исходные файлы или оставляет их для резервного хранения.

WebP поддерживается большинством современных браузеров, включая Chrome, Firefox, Edge и Opera, а также частично — Safari (начиная с определённых версий). Поэтому конвертация изображений на сервере становится не только полезной, но и практически обязательной для проектов, ориентированных на производительность.

Почему важно использовать WebP на сайте

Современные веб‑страницы содержат много графики: логотипы, баннеры, галереи товаров и фонов. Большие объемы изображений прямым образом влияют на скорость загрузки, время отклика и потребление трафика пользователей.

Преимущества WebP:

  • Существенно меньший размер при сопоставимом визуальном качестве.
  • Поддержка прозрачности (альфа‑канала), как у PNG.
  • Возможность выбирать режим сжатия: без потерь (lossless) и с потерями (lossy).
  • Улучшение SEO‑показателей, так как быстрая загрузка снижает отказ и повышает позиции в поисковых системах.

Вместо хранения JPEG и PNG можно хранить WebP‑версии изображений, выгружая их по запросу браузера. Это особенно актуально для интернет‑магазинов, блогов с большим количеством графики, портфолио‑сайтов и мультимедийных проектов.

Функция convertWebp — конвертация изображений в формат WebP на PHP

Функция convertWebp предназначена для автоматического преобразования изображений форматов JPEG, PNG, GIF в современный формат WebP, который обеспечивает уменьшение размера файлов при сохранении качества. Это особенно полезно для оптимизации загрузки сайта и экономии трафика пользователей.

Функция проверяет наличие исходного файла, определяет его тип, корректно обрабатывает прозрачность (для PNG) и сохраняет результат в формате WebP.

<?php
function convertWebp($src)
{
    if (file_exists($_SERVER['DOCUMENT_ROOT'] . $src)) {

        $newImgPath = str_replace(
            ['.jpg', '.jpeg', '.gif', '.png'],
            '.webp',
            $src
        );

        if (!file_exists($_SERVER['DOCUMENT_ROOT'] . $newImgPath)) {

            if ($src && function_exists('imagewebp')) {

                $info = getimagesize($_SERVER['DOCUMENT_ROOT'] . $src);

                if ($info !== false && ($type = $info[2])) {

                    switch ($type) {
                        case IMAGETYPE_JPEG:
                            $newImg = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'] . $src);
                            break;

                        case IMAGETYPE_GIF:
                            $newImg = imagecreatefromgif($_SERVER['DOCUMENT_ROOT'] . $src);
                            break;

                        case IMAGETYPE_PNG:
                            $newImg = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'] . $src);
                            imagepalettetotruecolor($newImg);
                            imagealphablending($newImg, true);
                            imagesavealpha($newImg, true);
                            break;

                        default:
                            $newImg = false;
                    }

                    if ($newImg) {
                        imagewebp($newImg, $_SERVER['DOCUMENT_ROOT'] . $newImgPath, 90);
                        imagedestroy($newImg);
                    }
                }
            }
        }

        return $newImgPath;

    } else {
        return false;
    }
}

Пример использования

$src = '/uploads/example.png';
$newWebp = convertWebp($src);if ($newWebp) {
echo "Файл успешно конвертирован: $newWebp";
} else {
echo "Ошибка конвертации или файл не найден";
}

Преимущества использования

  • Уменьшение размера изображений без потери качества, что ускоряет загрузку страниц.
  • Поддержка прозрачности для PNG.
  • Автоматическая генерация WebP без изменения исходных файлов.
  • Простая интеграция в существующие CMS или скрипты загрузки изображений.
  • Экономия ресурсов сервера благодаря проверке существования WebP-файла перед конвертацией.

Рекомендации

  • Использовать функцию при загрузке изображений на сервер, чтобы создавать WebP‑версии автоматически.
  • Проверять, что сервер поддерживает функцию imagewebp() (требуется PHP с GD 2.0+).
  • Для больших изображений можно регулировать качество сжатия, передавая параметр в imagewebp().