Работа с изображениями в PHP: библиотеки GD и Imagick
Обработка изображений — одна из ключевых задач веб-разработки. В PHP для этого используются две основные библиотеки: GD (встроенная) и Imagick (обёртка над ImageMagick). В этой статье мы разберём их возможности, научимся изменять размеры, обрезать, накладывать водяные знаки и оптимизировать изображения.
1. Библиотека GD
GD — это стандартное расширение PHP, доступное на большинстве хостингов. Оно позволяет создавать, изменять и сохранять изображения в форматах JPEG, PNG, GIF, WebP.
Подключение и проверка:
<?php
// Проверяем, установлено ли расширение GD
if (extension_loaded('gd') && function_exists('gd_info')) {
echo "GD установлена: ";
print_r(gd_info());
} else {
echo "GD не найдена";
}
?>
1.1 Изменение размера изображения (resize)
Самый частый сценарий — уменьшение изображения до нужных размеров с сохранением пропорций.
<?php
function resizeImage($sourcePath, $destPath, $newWidth, $newHeight) {
// Получаем размеры исходного изображения
list($width, $height, $type) = getimagesize($sourcePath);
// Создаём ресурс из исходного файла
switch ($type) {
case IMAGETYPE_JPEG:
$source = imagecreatefromjpeg($sourcePath);
break;
case IMAGETYPE_PNG:
$source = imagecreatefrompng($sourcePath);
break;
case IMAGETYPE_GIF:
$source = imagecreatefromgif($sourcePath);
break;
default:
return false;
}
// Создаём новое изображение
$newImage = imagecreatetruecolor($newWidth, $newHeight);
// Сохраняем прозрачность для PNG/GIF
imagealphablending($newImage, false);
imagesavealpha($newImage, true);
// Копируем и масштабируем
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Сохраняем результат
imagejpeg($newImage, $destPath, 85); // Качество 85%
// Освобождаем память
imagedestroy($source);
imagedestroy($newImage);
return true;
}
// Пример использования
resizeImage('photo.jpg', 'photo_thumb.jpg', 300, 200);
?>
1.2 Обрезка изображения (crop)
Обрезка позволяет выделить центральную часть изображения нужного размера.
<?php
function cropCenter($sourcePath, $destPath, $cropWidth, $cropHeight) {
list($width, $height) = getimagesize($sourcePath);
$source = imagecreatefromjpeg($sourcePath);
// Вычисляем координаты центра
$x = ($width - $cropWidth) / 2;
$y = ($height - $cropHeight) / 2;
$newImage = imagecreatetruecolor($cropWidth, $cropHeight);
imagecopyresampled($newImage, $source, 0, 0, $x, $y, $cropWidth, $cropHeight, $cropWidth, $cropHeight);
imagejpeg($newImage, $destPath, 90);
imagedestroy($source);
imagedestroy($newImage);
}
cropCenter('photo.jpg', 'photo_cropped.jpg', 400, 400);
?>
1.3 Наложение водяного знака
Добавление текста или логотипа поверх изображения.
<?php
function addWatermarkText($sourcePath, $destPath, $text = "© PythonLib.ru") {
$source = imagecreatefromjpeg($sourcePath);
$width = imagesx($source);
$height = imagesy($source);
// Цвет текста (белый с прозрачностью)
$color = imagecolorallocatealpha($source, 255, 255, 255, 50);
// Размер шрифта (используем встроенный шрифт)
$fontSize = 5;
$x = 10;
$y = $height - 20;
imagestring($source, $fontSize, $x, $y, $text, $color);
imagejpeg($source, $destPath, 90);
imagedestroy($source);
}
addWatermarkText('photo.jpg', 'photo_watermarked.jpg');
?>
2. Библиотека Imagick
Imagick — это расширение PHP для работы с ImageMagick. Оно предоставляет более мощные возможности: работа с PDF, SVG, сложные фильтры, анимация. Требует установки ImageMagick на сервер.
Установка:
- Ubuntu/Debian:
sudo apt install php-imagick imagemagick - Windows: скачать DLL с pecl.php.net
Также в библиотеке
Работа с CSV в Kotlin: библиотеки, парсинг и запись данных
better-sqlite3-typescript для TypeScript: полное руководство с примерами
Работа с датами в PHP: обзор библиотек и инструментов
Dependency Injection контейнер для C# (.NET) — полное руководство