## Базовое использование

Модуль Imagick чрезвычайно упрощает манипулирование изображениями в PHP через объектно-ориентированный интерфейс. Вот короткий пример того, как сделать миниатюру:

Пример #1 Создание миниатюры через объект Imagick

    <?php

    header('Content-type: image/jpeg');

    $image = new Imagick('image.jpg');

    // Если в качестве параметра ширины или высоты передать 0,
    // соотношение сторон сохраняется
    $image->thumbnailImage(100, 0);

    echo $image;

    ?>

С библиотекой SPL и другими объектно-ориентированными функциями, которые поддерживает модуль Imagick, без усилий изменяют размер каждого файла в каталоге (полезно для пакетного изменения размера больших цифровых изображений для просмотра на веб-страницах). Пример изменяет размер, поскольку может потребоваться сохранить отдельные метаданные:

Пример #2 Создание миниатюр для всех JPG-файлов в директории

    <?php

    $images = new Imagick(glob('images/*.JPG'));

    foreach($images as $image) {
        // Передаём в метод thumbnailImage значение 0, чтобы сохранить соотношение сторон
        $image->thumbnailImage(1024,0);
    }

    $images->writeImages();

    ?>

Этот пример создаёт отражение изображения. Отражение создаётся зеркальным отображением и наложением градиента на нём. Затем оригинальное изображение и его отражение накладываются на холст.

Пример #3 Создание отражения

    <?php

    /* Чтение изображения */
    $im = new Imagick("test.png");

    /* Миниатюра изображения */
    $im->thumbnailImage(200, null);

    /* Создание рамки для изображения */
    $im->borderImage(new ImagickPixel("white"), 5, 5);

    /* Клонируем изображение и зеркально поворачиваем его */
    $reflection = $im->clone();
    $reflection->flipImage();

    /* Создаём градиент. Это будет наложением для отражения */
    $gradient = new Imagick();

    /* Градиент должен быть достаточно большой для изображения и его рамки */
    $gradient->newPseudoImage($reflection->getImageWidth() + 10, $reflection->getImageHeight() + 10, "gradient:transparent-black");

    /* Наложение градиента на отражение */
    $reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);

    /* Добавляем прозрачность. Требуется ImageMagick 6.2.9 или выше */
    $reflection->setImageOpacity( 0.3 );

    /* Создаём пустой холст */
    $canvas = new Imagick();

    /* Холст должен быть достаточно большой, чтобы вместить оба изображения */
    $width = $im->getImageWidth() + 40;
    $height = ($im->getImageHeight() * 2) + 30;
    $canvas->newImage($width, $height, new ImagickPixel("black"));
    $canvas->setImageFormat("png");

    /* Наложение оригинального изображения и отражения на холст */
    $canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
    $canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);

    /* Вывод изображения */
    header("Content-Type: image/png");
    echo $canvas;

    ?>

Вывод приведённого примера будет похож на:

Этот пример иллюстрирует, как использовать заливку во время рисования.

Пример #4 Заливка текста градиентом

    <?php

    /* Создание нового объекта imagick */
    $im = new Imagick();

    /* Создание нового изображения. Будет играть роль шаблона заливки */
    $im->newPseudoImage(50, 50, "gradient:red-black");

    /* Создаём объект imagickdraw */
    $draw = new ImagickDraw();

    /* Запускаем новый шаблон с названием "gradient" */
    $draw->pushPattern('gradient', 0, 0, 50, 50);

    /* Смешиваем градиент с шаблоном */
    $draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);

    /* Закрываем шаблон */
    $draw->popPattern();

    /* Используем шаблон с названием «gradient» для заливки */
    $draw->setFillPatternURL('#gradient');

    /* Устанавливаем размер шрифта в 52 */
    $draw->setFontSize(52);

    /* Добавляем свой текст */
    $draw->annotation(20, 50, "Hello World!");

    /* Создаём новый объект холста и белое изображение */
    $canvas = new Imagick();
    $canvas->newImage(350, 70, "white");

    /* Рисуем ImagickDraw на холсте */
    $canvas->drawImage($draw);

    /* устанавливаем чёрную рамку шириной 1px вокруг изображения */
    $canvas->borderImage('black', 1, 1);

    /* Устанавливаем формат PNG */
    $canvas->setImageFormat('png');

    /* Вывод изображения */
    header("Content-Type: image/png");
    echo $canvas;
    ?>

Вывод приведённого примера будет похож на:

Работа с анимированными GIF-изображениями

Пример #5 Чтение GIF-изображения и изменение размера каждого фрейма

    <?php

    /* Создание нового объекта imagick и чтение в GIF */
    $im = new Imagick("example.gif");

    /* Изменение размера всех фреймов */
    foreach ($im as $frame) {
        /* фреймы 50x50 */
        $frame->thumbnailImage(50, 50);

        /* Устанавливаем виртуальный холст для коррекции размера */
        $frame->setImagePage(50, 50, 0, 0);
    }

    /* Обратите внимание, вызываем метод writeImages, а не writeImage */
    $im->writeImages("example_small.gif", true);

    ?>

Работа с примитивом «эллипс» и пользовательскими шрифтами

Пример #6 Создание PHP-логотипа

    <?php

    /* Установка ширины и высоты в пропорции логотипа PHP */
    $width = 400;
    $height = 210;

    /* Создание объекта Imagick с поддержкой прозрачности */
    $img = new Imagick();
    $img->newImage($width, $height, new ImagickPixel('transparent'));

    /* Новый объект ImagickDraw  для отрисовки эллипса */
    $draw = new ImagickDraw();

    /* Установка пурпурного цвета заливки для эллипса */
    $draw->setFillColor('#777bb4');

    /* Задание размеров эллипса */
    $draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);

    /* Отрисовка эллипса */
    $img->drawImage($draw);

    /* Сброс цвета заливки с пурпурного на чёрный для текста (заметьте, что мы работаем с объектом ImagickDraw повторно) */
    $draw->setFillColor('black');

    /* Задание обводки границы белым цветом */
    $draw->setStrokeColor('white');

    /* Задание толщины обводки */
    $draw->setStrokeWidth(2);

    /* Задание кёрнинга (отрицательные значения означают, что буквы будут ближе друг к другу) */
    $draw->setTextKerning(-8);

    /* Задание шрифта и его размера, которые используются в логотипе PHP */
    $draw->setFont('Handel Gothic.ttf');
    $draw->setFontSize(150);

    /* Центрирование текста вертикально и горизонтально */
    $draw->setGravity(Imagick::GRAVITY_CENTER);

    /* Добавление текста «php» со смещением по Y на -10 на холст (внутри эллипса) */
    $img->annotateImage($draw, 0, -10, 0, 'php');
    $img->setImageFormat('png');

    /* Установка заголовка для PNG-файла и вывод изображения */
    header('Content-Type: image/png');
    echo $img;

    ?>

Вывод приведённого примера будет похож на:

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open