04 Изображения
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');