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

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

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

Начать курс

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

Обработка изображений — одна из частых задач веб-разработки. На PHP есть две основные библиотеки для работы с графикой: GD (встроенная) и Imagick (обёртка над ImageMagick). В этой статье разберём их возможности, установку и практические примеры.

Библиотека GD

GD — стандартное расширение PHP, доступное на большинстве хостингов. Позволяет создавать, изменять и сохранять изображения в форматах JPEG, PNG, GIF, WEBP.

Установка

В Ubuntu/Debian:

sudo apt install php-gd
sudo systemctl restart apache2

В Windows — раскомментируйте строку extension=gd в php.ini.

Основные функции GD

  • imagecreatefromjpeg(), imagecreatefrompng() — загрузка изображения
  • imagesx(), imagesy() — получение ширины и высоты
  • imagecopyresampled() — масштабирование с ресемплингом
  • imagefilter() — применение фильтров (размытие, негатив)
  • imagettftext() — текст с TrueType шрифтом
  • imagejpeg(), imagepng() — сохранение результата

Пример 1: Изменение размера изображения

<?php
$src = 'photo.jpg';
$dest = 'thumb.jpg';
$newWidth = 300;

// Загружаем исходное изображение
$img = imagecreatefromjpeg($src);
$width = imagesx($img);
$height = imagesy($img);

// Вычисляем новую высоту пропорционально
$newHeight = intval($height * $newWidth / $width);

// Создаём новое изображение
$thumb = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

// Сохраняем
imagejpeg($thumb, $dest, 85);
imagedestroy($img);
imagedestroy($thumb);
echo "Готово: $dest";
?>

Пример 2: Наложение водяного знака

<?php
$mainImg = imagecreatefromjpeg('background.jpg');
$watermark = imagecreatefrompng('logo.png');

// Получаем размеры
$mW = imagesx($mainImg);
$mH = imagesy($mainImg);
$wW = imagesx($watermark);
$wH = imagesy($watermark);

// Позиция — правый нижний угол с отступом 10px
$dstX = $mW - $wW - 10;
$dstY = $mH - $wH - 10;

// Копируем водяной знак с прозрачностью
imagecopy($mainImg, $watermark, $dstX, $dstY, 0, 0, $wW, $wH);

// Сохраняем
imagepng($mainImg, 'result.png');
imagedestroy($mainImg);
imagedestroy($watermark);
?>

Библиотека Imagick

Imagick — объектно-ориентированная обёртка над мощным инструментом ImageMagick. Поддерживает более 200 форматов, сложные трансформации, работу с PDF, анимацию и цветовые профили.

Установка

sudo apt install imagemagick php-imagick
sudo systemctl restart apache2

Проверить установку:

<?php phpinfo(); ?>

Найдите секцию imagick.

Основные классы и методы

  • Imagick — основной класс для работы с изображением
  • readImage() — загрузка файла
  • resizeImage() — изменение размера
  • cropImage() — обрезка
  • compositeImage() — наложение изображений
  • blurImage() — размытие
  • setImageFormat() — конвертация формата

Пример 3: Масштабирование и обрезка (кроп)

<?php
$image = new Imagick('photo.jpg');

// Масштабируем до 800x600, сохраняя пропорции
$image->resizeImage(800, 600, Imagick::FILTER_LANCZOS, 1, true);

// Обрезаем центральную часть 400x400
$width = $image->getImageWidth();
$height = $image->getImageHeight();
$x = ($width - 400) / 2;
$y                    

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