Конвертация изображений в формат 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().