#Чтение изображений
#Чтение источников изображений
public ImageManager::read(mixed $input, string|array|DecoderInterface $decoders = []): ImageInterface
С настроенным Image Manager можно читать изображения из различных источников. Метод принимает не только пути в файловой системе, но и двоичные данные изображения, данные, закодированные в Base64, или изображения в формате Data Uri. Также в качестве входных данных можно передать различные объекты и ресурсы PHP. Полный список приведён ниже.
#Параметры
| Имя | Тип | Описание |
|---|---|---|
| input | mixed | Источник изображения |
| decoders | string, array or DecoderInterface | Декодер(ы) для обработки входных данных; по умолчанию декодер определяется автоматически |
#Поддерживаемые источники изображений
Принимаются следующие форматы аргумента input.
- Путь в файловой системе
- Сырые (двоичные) данные изображения
- Данные изображения, закодированные в Base64
- Data Uri
- Ресурс указателя файла
SplFileInfo, от которого происходятIlluminate\Http\UploadedFileиSymfony\Component\HttpFoundation\File\UploadedFile- Экземпляр Intervention Image (
Intervention\Image\Image) - Кодированное изображение Intervention (
Intervention\Image\EncodedImage) - Изображение, специфичное для драйвера (экземпляр
GDImageилиImagick)
Для декодирования входных данных при необходимости вы можете указать стратегию декодирования вторым параметром. Это может быть массив имён классов или объектов декодеров, которые будут применяться последовательно. В этом случае входные данные должны быть декодируемы одним из переданных декодеров. Также можно передать одиночный объект или имя класса декодера.
Можно передать любые декодеры, реализующие DecoderInterface::class. Обычно это набор классов из пространства имён Intervention\Image\Decoders.
Если второй параметр опущен, драйвер попытается декодировать данные с помощью всех доступных декодеров. Если библиотека не сможет декодировать переданный аргумент, будет выброшено исключение типа Intervention\Image\Exceptions\DecoderException.
#Пример
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// создать новый экземпляр менеджера с выбранным драйвером
$manager = new ImageManager(new Driver());
// прочитать изображение из файловой системы
$image = $manager->read('images/example.jpg');
// прочитать изображение из бинарных данных
$image = $manager->read(file_get_contents('images/example.jpg'));
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Decoders\DataUriImageDecoder;
use Intervention\Image\Decoders\Base64ImageDecoder;
use Intervention\Image\Decoders\FilePathImageDecoder;
// создать новый экземпляр менеджера с выбранным драйвером
$manager = new ImageManager(new Driver());
// читать изображение только из data URI или base64-кодированных данных
$image = $manager->read($input, [
DataUriImageDecoder::class,
Base64ImageDecoder::class,
]);
// читать изображение только по пути к файлу
$image = $manager->read($input, FilePathImageDecoder::class);
// то же самое с объектом вместо имени класса
$image = $manager->read($input, new FilePathImageDecoder());
#Создание изображений
#Создание новых изображений
public ImageManager::create(int $width, int $height): ImageInterface
Чтение существующих источников изображений — это одно, а что если нужно создать собственные изображения? Intervention Images поможет в этом. Вы начинаете с экземпляра класса Intervention\Image\ImageManager и вызываете метод create() с желаемыми размерами изображения в качестве аргументов. См. пример ниже:
По умолчанию изображение создаётся с прозрачным фоном. Если вы хотите задать цвет фона, используйте метод fill() после создания.
#Параметры
| Имя | Тип | Описание |
|---|---|---|
| width | integer | Ширина изображения |
| height | integer | Высота изображения |
#Пример
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// создать новый экземпляр менеджера с выбранным драйвером
$manager = new ImageManager(Driver::class);
// создать новое изображение 640x480
$image = $manager->create(640, 480);
// создать новое изображение 512x512 с серым фоном
$image = $manager->create(512, 512)->fill('ccc');
#Создание анимаций
public ImageManager::animate(callable $callback): ImageInterface
Также можно создавать анимированную графику. Для этого используется функция "animate". Ей передаётся callback-функция, которая определяет источник и задержку для отдельных кадров анимации. Важно учитывать, что создаваемая таким образом анимация будет выведена только в формате, поддерживающем анимацию.
Анимации возможны во всех поставляемых драйверах. Узнайте больше о том, как изменять анимированные изображения.
#Параметры
| Имя | Тип | Описание |
|---|---|---|
| callback | callable | Настройка анимации |
#Пример
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// создать новый экземпляр менеджера с выбранным драйвером
$manager = new ImageManager(new Driver());
// создать анимированное изображение из трёх кадров с задержкой 250 мс на каждый кадр
$image = $manager->animate(function ($animation) {
$animation->add('images/frame01.png', .25);
$animation->add('images/frame02.png', .25);
$animation->add('images/frame03.png', .25);
})->setLoops(4);
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// создать новый экземпляр менеджера с выбранным драйвером
$manager = new ImageManager(Driver::Class);
// создать циклическую анимацию из 5 кадров, создавая
// собственные кадры анимации через метод drawCircle
$animation = $manager->animate(function ($animation) use ($manager) {
for ($i = 1; $i <= 5; $i++) {
$animation->add(
$manager->create(300, 300) // размер кадра
->fill('b53717') // цвет фона кадра
->drawCircle(150, 150, function ($circle) use ($i) {
$circle->radius(40 * $i); // радиус круга в пикселях
$circle->border('fff', 5); // цвет и ширина границы
}),
.15 // задержка кадра
);
}
})->setLoops(10);