Phalcon\Image это компонент, который позволяет управлять файлами изображений. Над одним и тем же объектом изображения можно выполнять несколько операций.

Адаптеры

Этот компонент использует адаптеры для инкапсуляции определенных программ манипулятора изображений. Поддерживаются следующие программы манипулятора изображений:

КлассОписание
Phalcon\Image\Adapter\Gd Требует GD PHP extension
Phalcon\Image\Adapter\Imagick Требует ImageMagick PHP extension

Factory

Загружает класс адаптера изображения с использованием опции adapter.

<?php

use Phalcon\Image\Factory;

$options = [
    'width'   => 200,
    'height'  => 200,
    'file'    => 'upload/test.jpg',
    'adapter' => 'imagick',
];

$image = Factory::load($options);

Внедрение собственных адаптеров

Интерфейс Phalcon\Image\AdapterInterface должен быть реализован для создания собственных адаптеров изображений или расширения существующих.

Сохранение и рендеринг изображений

Прежде чем мы начнем с различных функций компонента image, стоит понять, как сохранять и визуализировать эти изображения.

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// ...

// Перезаписать исходное изображение
$image->save();
<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// ...

// Сохранить в 'new-image.jpg'
$image->save('new-image.jpg');

Вы также можете изменить формат изображения:

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// ...

// Сохранить как PNG-файл
$image->save('image.png');

При сохранении в формате JPEG можно также указать качество в качестве второго параметра:

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// ...

// Сохранить как JPEG с качеством 80%
$image->save('image.jpg', 80);

Изменение размера изображений

Существует несколько режимов изменения размера:

  • \Phalcon\Image::WIDTH
  • \Phalcon\Image::HEIGHT
  • \Phalcon\Image::NONE
  • \Phalcon\Image::TENSILE
  • \Phalcon\Image::AUTO
  • \Phalcon\Image::INVERSE
  • \Phalcon\Image::PRECISE

\Phalcon\Image::WIDTH

Высота будет сгенерирована автоматически для сохранения пропорций; если вы укажете высоту, она будет проигнорирована.

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->resize(
    300,
    null,
    \Phalcon\Image::WIDTH
);

$image->save('resized-image.jpg');

\Phalcon\Image::HEIGHT

Ширина будет сгенерирована автоматически для сохранения пропорций; если вы укажете ширину, она будет проигнорирована.

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->resize(
    null,
    300,
    \Phalcon\Image::HEIGHT
);

$image->save('resized-image.jpg');

\Phalcon\Image::NONE

  • Константа NONE игнорирует соотношение исходного изображения.
  • Ни ширина, ни высота не требуются.
  • Если размер не указан, будет использоваться исходный размер.
  • Если новые пропорции отличаются от исходных, изображение может быть искажено и растянуто.
<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->resize(
    400,
    200,
    \Phalcon\Image::NONE
);

$image->save('resized-image.jpg');

\Phalcon\Image::TENSILE

  • Подобно константе NONE, константа TENSILE игнорирует отношение исходного изображения.
  • И ширина и высота необходимы.
  • Если новые пропорции отличаются от исходных, изображение может быть искажено и растянуто.
<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->resize(
    400,
    200,
    \Phalcon\Image::TENSILE
);

$image->save('resized-image.jpg');

Обрезка изображений

Например, чтобы получить квадрат 100px на 100px из центра изображения:

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$width   = 100;
$height  = 100;
$offsetX = (($image->getWidth() - $width) / 2);
$offsetY = (($image->getHeight() - $height) / 2);

$image->crop($width, $height, $offsetX, $offsetY);

$image->save('cropped-image.jpg');

Поворот изображений

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// Повернуть изображение на 90 градусов по часовой стрелке
$image->rotate(90);

$image->save('rotated-image.jpg');

Перелистывание изображений

Вы можете перевернуть изображение горизонтально (с помощью константы \Phalcon\Image::HORIZONTAL) и по вертикали (с помощью константы \Phalcon\Image::VERTICAL):

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

// Отразить изображение горизонтально
$image->flip(
    \Phalcon\Image::HORIZONTAL
);

$image->save('flipped-image.jpg');

Повышение резкости изображений

Метод sharpen() принимает один параметр-целое число от 0 (без эффекта) до 100 (очень резкое):

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->sharpen(50);

$image->save('sharpened-image.jpg');

Добавление водяных знаков к изображениям

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$watermark = new \Phalcon\Image\Adapter\Gd('me.jpg');

// Поместить водяной знак в левом верхнем углу
$offsetX = 10;
$offsetY = 10;

$opacity = 70;

$image->watermark(
    $watermark,
    $offsetX,
    $offsetY,
    $opacity
);

$image->save('watermarked-image.jpg');

Конечно, вы также можете манипулировать водяным знаком изображения, прежде чем применять его к основному изображению:

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$watermark = new \Phalcon\Image\Adapter\Gd('me.jpg');

$watermark->resize(100, 100);
$watermark->rotate(90);
$watermark->sharpen(5);

// Поместите водяной знак в правом нижнем углу с 10px поля
$offsetX = ($image->getWidth() - $watermark->getWidth() - 10);
$offsetY = ($image->getHeight() - $watermark->getHeight() - 10);

$opacity = 70;

$image->watermark(
    $watermark,
    $offsetX,
    $offsetY,
    $opacity
);

$image->save('watermarked-image.jpg');

Размывание изображений

Метод blur() принимает один параметр-целое число от 0 (без эффекта) до 100 (очень размыто):

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->blur(50);

$image->save('blurred-image.jpg');

Пикселизация изображений

В pixelate() метод принимает один параметр - чем выше число, тем более неровной будет изображение:

<?php

$image = new \Phalcon\Image\Adapter\Gd('image.jpg');

$image->pixelate(10);

$image->save('pixelated-image.jpg');