Работа с изображениями в PHP: полное руководство по GD и Imagick

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с изображениями в 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 на сервер.

Установка:

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