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');