Работа с изображениями
Класс Nette\Utils\Image упрощает манипулирование изображениями, например, изменение размера, обрезку, повышение резкости, рисование или объединение нескольких изображений.
PHP имеет обширный набор функций для работы с изображениями. Но их API не очень удобен. Это был бы не Nette Framework, если бы он не предложил сексуальный API.
Установка:
composer require nette/utils
Все примеры предполагают созданный псевдоним:
use Nette\Utils\Image;
use Nette\Utils\ImageColor;
use Nette\Utils\ImageType;
Создание изображения
Создадим новое изображение true color, например, размером 100×200:
$image = Image::fromBlank(100, 200);
Можно также указать цвет фона (по умолчанию черный):
$image = Image::fromBlank(100, 200, ImageColor::rgb(125, 0, 0));
Или загрузим изображение из файла:
$image = Image::fromFile('nette.jpg');
Сохранение изображения
Изображение можно сохранить в файл:
$image->save('resampled.jpg');
Мы можем указать качество сжатия в диапазоне 0..100 для JPEG (по умолчанию 85), WEBP (по умолчанию 80) и AVIF (по умолчанию 30) и 0..9 для PNG (по умолчанию 9):
$image->save('resampled.jpg', 80); // JPEG, качество 80%
Если формат не очевиден из расширения файла, его можно указать константой:
$image->save('resampled.tmp', null, ImageType::JPEG);
Изображение можно записать в переменную вместо диска:
$data = $image->toString(ImageType::JPEG, 80); // JPEG, качество 80%
или отправить прямо в браузер с соответствующим HTTP-заголовком
Content-Type
:
// отправляет заголовок Content-Type: image/png
$image->send(ImageType::PNG);
Форматы
Поддерживаемые форматы: JPEG, PNG, GIF, WebP, AVIF и BMP, однако они также должны поддерживаться вашей версией PHP, что можно проверить с помощью функции #isTypeSupported(). Анимация не поддерживается.
Формат представлен константами ImageType::JPEG
, ImageType::PNG
,
ImageType::GIF
, ImageType::WEBP
, ImageType::AVIF
и ImageType::BMP
.
$supported = Image::isTypeSupported(ImageType::JPEG);
Нужно определить формат изображения при загрузке? Метод вернет его во втором параметре:
$image = Image::fromFile('nette.jpg', $type);
Само определение без загрузки изображения выполняет
Image::detectTypeFromFile()
.
Изменение размера
Частой операцией является изменение размеров изображения. Текущие
размеры возвращают методы getWidth()
и getHeight()
.
Для изменения используется метод resize()
. Пример
пропорционального изменения размера так, чтобы он не превышал размеры
500×300 пикселей (либо ширина будет ровно 500 px, либо высота будет ровно
300 px, один из размеров будет рассчитан так, чтобы сохранить соотношение
сторон):
$image->resize(500, 300);
Можно указать только один размер, а второй будет рассчитан:
$image->resize(500, null); // ширина 500px, высота рассчитывается
$image->resize(null, 300); // ширина рассчитывается, высота 300px
Любой размер можно указать и в процентах:
$image->resize('75%', 300); // 75 % × 300px
Поведение resize
можно изменить с помощью следующих флагов. Все,
кроме Image::Stretch
, сохраняют соотношение сторон.
Флаг | Описание |
---|---|
Image::OrSmaller (по умолчанию) |
итоговые размеры будут меньше или равны требуемым размерам |
Image::OrBigger |
заполняет (и при необходимости превышает в одном измерении) целевую область |
Image::Cover |
заполняет целевую область и обрезает то, что выходит за ее пределы |
Image::ShrinkOnly |
только уменьшение (предотвращает растягивание маленького изображения) |
Image::Stretch |
не сохранять соотношение сторон |
Флаги указываются как третий аргумент функции:
$image->resize(500, 300, Image::OrBigger);
Флаги можно комбинировать:
$image->resize(500, 300, Image::ShrinkOnly | Image::Stretch);
Изображения можно переворачивать по вертикали или горизонтали, указав один из размеров (или оба) как отрицательное число:
$flipped = $image->resize(null, '-100%'); // перевернуть по вертикали
$flipped = $image->resize('-100%', '-100%'); // повернуть на 180°
$flipped = $image->resize(-125, 500); // изменить размер и перевернуть по горизонтали
После уменьшения изображения можно улучшить его внешний вид легким повышением резкости:
$image->sharpen();
Обрезка
Для обрезки используется метод crop()
:
$image->crop($left, $top, $width, $height);
Аналогично resize()
, все значения могут быть указаны в процентах.
Проценты для $left
и $top
рассчитываются от оставшегося
места, подобно CSS-свойству background-position
:
$image->crop('100%', '50%', '80%', '80%');
Изображение также можно обрезать автоматически, например, обрезать черные края:
$image->cropAuto(IMG_CROP_BLACK);
Метод cropAuto()
является объектной заменой функции
imagecropauto()
, в ее документации
вы найдете дополнительную информацию.
Цвета
Метод ImageColor::rgb()
позволяет определить цвет с помощью значений
красного, зеленого и синего (RGB). Опционально можно также указать
значение прозрачности в диапазоне от 0 (полностью прозрачный) до 1
(полностью непрозрачный), то есть так же, как в CSS.
$color = ImageColor::rgb(255, 0, 0); // Красный
$transparentBlue = ImageColor::rgb(0, 0, 255, 0.5); // Полупрозрачный синий
Метод ImageColor::hex()
позволяет определить цвет с помощью
шестнадцатеричного формата, аналогично CSS. Поддерживает форматы
#rgb
, #rrggbb
, #rgba
и #rrggbbaa
:
$color = ImageColor::hex("#F00"); // Красный
$transparentGreen = ImageColor::hex("#00FF0080"); // Полупрозрачный зеленый
Цвета можно использовать в других методах, таких как ellipse()
,
fill()
и т. д.
Рисование и редактирование
Можешь рисовать, можешь писать, но листья не рвать. Вам доступны все функции PHP для работы с изображениями, см. #Обзор методов, но в объектной обертке:
$image->filledEllipse($centerX, $centerY, $width, $height, ImageColor::rgb(255, 0, 0));
Поскольку функции PHP для рисования прямоугольников неудобны из-за
указания координат, класс Image
предлагает их замены в виде
функций #rectangleWH() и #filledRectangleWH().
Объединение нескольких изображений
В изображение можно легко вставить другое изображение:
$logo = Image::fromFile('logo.png');
$blank = Image::fromBlank(320, 240, ImageColor::rgb(52, 132, 210));
// координаты можно снова указать в процентах
$blank->place($logo, '80%', '80%'); // вставляем рядом с правым нижним углом
При вставке учитывается альфа-канал, кроме того, можно влиять на прозрачность вставляемого изображения (создаем так называемый водяной знак):
$blank->place($image, '80%', '80%', 25); // прозрачность 25 %
Такой API действительно приятно использовать!
Обзор методов
static fromBlank (int $width, int $height, ?ImageColor $color=null): Image
Создает новое изображение true color заданных размеров. Цвет по умолчанию – черный.
static fromFile (string $file, int &$detectedFormat=null): Image
Загружает изображение из файла и возвращает его тип в
$detectedFormat
.
static fromString (string $s, int &$detectedFormat=null): Image
Загружает изображение из строки и возвращает его тип в
$detectedFormat
.
static rgb (int $red, int $green, int $blue, int $transparency=0): array
Эта функция заменена классом ImageColor
, см. цвета.
static typeToExtension (int $type): string
Возвращает расширение файла для данного типа.
static typeToMimeType (int $type): string
Возвращает mime-тип для данного типа.
static extensionToType (string $extension): int
Возвращает тип изображения по расширению файла.
static detectTypeFromFile (string $file, int &$width=null, int &$height=null): ?int
Возвращает тип изображения и в параметрах $width
и
$height
также его размеры.
static detectTypeFromString (string $s, int &$width=null, int &$height=null): ?int
Возвращает тип изображения из строки и в параметрах
$width
и $height
также его размеры.
static isTypeSupported (int $type): bool
Проверяет, поддерживается ли данный тип изображения.
static getSupportedTypes(): array
Возвращает массив поддерживаемых типов изображений.
static calculateTextBox (string $text, string $fontFile, float $size, float $angle=0, array $options=[]): array
Вычисляет размеры прямоугольника, который охватывает текст
определенного шрифта и размера. Возвращает ассоциативный массив,
содержащий ключи left
, top
, width
, height
. Левый край
может быть отрицательным, если текст начинается с левого подрезания.
affine (array $affine, ?array $clip=null): Image
Возвращает изображение, содержащее аффинно преобразованное изображение src с использованием необязательной области обрезки. (подробнее).
affineMatrixConcat (array $m1, array $m2): array
Возвращает конкатенацию двух аффинных матриц преобразования, что полезно, если к одному и тому же изображению нужно применить несколько преобразований одновременно. (подробнее)
affineMatrixGet (int $type, ?mixed $options=null): array
Возвращает матрицу преобразования. (подробнее)
alphaBlending (bool $on): void
Позволяет использовать два разных режима рисования в изображениях
truecolor. В режиме смешивания компонент альфа-канала цвета, используемый
во всех функциях рисования, таких как setPixel()
, определяет, в какой
степени должна просвечивать основная краска. В результате
существующий цвет в этой точке автоматически смешивается с рисуемым
цветом, и результат сохраняется в изображении. Полученный пиксель
непрозрачен. В режиме без смешивания рисуемый цвет копируется
буквально с информацией альфа-канала и заменяет целевой пиксель. Режим
смешивания недоступен при рисовании на палитровых изображениях. (подробнее)
antialias (bool $on): void
Активируйте рисование сглаженных линий и полигонов. Не поддерживает альфа-каналы. Работает только с изображениями truecolor.
Использование сглаженных примитивов с прозрачным цветом фона может привести к неожиданным результатам. Метод смешивания использует цвет фона так же, как и все остальные цвета. (подробнее)
arc (int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color): void
Рисует дугу окружности с центром в заданных координатах. (подробнее)
colorAllocate (int $red, int $green, int $blue): int
Возвращает идентификатор цвета, представляющий цвет, составленный из заданных RGB-компонентов. Должна быть вызвана для создания каждого цвета, который будет использоваться в изображении. (подробнее)
colorAllocateAlpha (int $red, int $green, int $blue, int $alpha): int
Ведет себя так же, как colorAllocate()
, с добавлением параметра
прозрачности $alpha
. (подробнее)
colorAt (int $x, int $y): int
Возвращает индекс цвета пикселя в указанном месте изображения. Если изображение является truecolor, эта функция вернет RGB-значение этого пикселя как целое число. Используйте битовый сдвиг и битовую маску для доступа к отдельным значениям красного, зеленого и синего компонентов: (подробнее)
colorClosest (int $red, int $green, int $blue): int
Возвращает индекс цвета в палитре изображения, который «наиболее близок» к указанному RGB-значению. “Расстояние” между требуемым цветом и каждым цветом в палитре вычисляется так, как если бы значения RGB представляли точки в трехмерном пространстве. (подробнее)
colorClosestAlpha (int $red, int $green, int $blue, int $alpha): int
Возвращает индекс цвета в палитре изображения, который «наиболее
близок» к указанному RGB-значению и уровню $alpha
. (подробнее)
colorClosestHWB (int $red, int $green, int $blue): int
Получить индекс цвета, который имеет оттенок, белый и черный цвета, наиболее близкие к заданному цвету. (подробнее)
colorDeallocate (int $color): void
Деаллоцирует цвет, ранее выделенный с помощью colorAllocate()
или
colorAllocateAlpha()
. (подробнее)
colorExact (int $red, int $green, int $blue): int
Возвращает индекс указанного цвета в палитре изображения. (подробнее)
colorExactAlpha (int $red, int $green, int $blue, int $alpha): int
Возвращает индекс указанного цвета + альфа в палитре изображения. (подробнее)
colorMatch (Image $image2): void
Подгоняет цвета палитры ко второму изображению. (подробнее)
colorResolve (int $red, int $green, int $blue): int
Возвращает индекс цвета для требуемого цвета, либо точный цвет, либо ближайшую возможную альтернативу. (подробнее)
colorResolveAlpha (int $red, int $green, int $blue, int $alpha): int
Возвращает индекс цвета для требуемого цвета, либо точный цвет, либо ближайшую возможную альтернативу. (подробнее)
colorSet (int $index, int $red, int $green, int $blue): void
Устанавливает указанный индекс в палитре на заданный цвет. (подробнее)
colorsForIndex (int $index): array
Получает цвет указанного индекса. (подробнее)
colorsTotal(): int
Возвращает количество цветов в палитре изображения. (подробнее)
colorTransparent (?int $color=null): int
Получает или устанавливает прозрачный цвет в изображении. (подробнее)
convolution (array $matrix, float $div, float $offset): void
Применяет к изображению сверточную матрицу, используя заданный коэффициент и смещение. (подробнее)
Требует наличия Bundled GD extension, поэтому может работать не везде.
copy (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH): void
Копирует часть $src
на изображение, начиная с координат
$srcX
, $srcY
с шириной $srcW
и высотой $srcH
.
Определенная часть будет скопирована на координаты $dstX
и
$dstY
. (подробнее)
copyMerge (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $opacity): void
Копирует часть $src
на изображение, начиная с координат
$srcX
, $srcY
с шириной $srcW
и высотой $srcH
.
Определенная часть будет скопирована на координаты $dstX
и
$dstY
. (подробнее)
copyMergeGray (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $srcW, int $srcH, int $opacity): void
Копирует часть $src
на изображение, начиная с координат
$srcX
, $srcY
с шириной $srcW
и высотой $srcH
.
Определенная часть будет скопирована на координаты $dstX
и
$dstY
.
Эта функция идентична copyMerge()
, за исключением того, что при
слиянии она сохраняет оттенок источника, преобразуя целевые пиксели в
оттенки серого перед операцией копирования. (подробнее)
copyResampled (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH): void
Копирует прямоугольную часть одного изображения на другое изображение, плавно интерполируя значения пикселей, так что, в частности, уменьшение размера изображения по-прежнему сохраняет большую четкость.
Другими словами, copyResampled()
берет прямоугольную область из
$src
шириной $srcW
и высотой $srcH
в положении
($srcX
, $srcY
) и помещает ее в прямоугольную область
изображения шириной $dstW
и высотой $dstH
в положении
($dstX
, $dstY
).
Если исходные и целевые координаты, ширина и высота различаются, выполняется соответствующее растяжение или сжатие фрагмента изображения. Координаты относятся к левому верхнему углу. Эту функцию можно использовать для копирования областей в одном и том же изображении, но если области перекрываются, результаты будут непредсказуемыми. (подробнее)
copyResized (Image $src, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH): void
Копирует прямоугольную часть одного изображения на другое
изображение. Другими словами, copyResized()
берет прямоугольную
область из $src
шириной $srcW
и высотой $srcH
в положении
($srcX
, $srcY
) и помещает ее в прямоугольную область
изображения шириной $dstW
и высотой $dstH
в положении
($dstX
, $dstY
).
Если исходные и целевые координаты, ширина и высота различаются, выполняется соответствующее растяжение или сжатие фрагмента изображения. Координаты относятся к левому верхнему углу. Эту функцию можно использовать для копирования областей в одном и том же изображении, но если области перекрываются, результаты будут непредсказуемыми. (подробнее)
crop (int|string $left, int|string $top, int|string $width, int|string $height): Image
Обрезает изображение до заданной прямоугольной области. Размеры
можно указывать как целые числа в пикселях или строки в процентах
(например, '50%'
).
cropAuto (int $mode=-1, float $threshold=.5, ?ImageColor $color=null): Image
Автоматически обрезает изображение в соответствии с заданным
$mode
. (подробнее)
ellipse (int $centerX, int $centerY, int $width, int $height, ImageColor $color): void
Рисует эллипс с центром в заданных координатах. (подробнее)
fill (int $x, int $y, ImageColor $color): void
Заполняет область, начиная с заданной координаты (верхний левый
угол – 0, 0), заданным $color
. (подробнее)
filledArc (int $centerX, int $centerY, int $width, int $height, int $startAngle, int $endAngle, ImageColor $color, int $style): void
Рисует частичную дугу с центром в заданных координатах. (подробнее)
filledEllipse (int $centerX, int $centerY, int $width, int $height, ImageColor $color): void
Рисует эллипс с центром в заданных координатах. (подробнее)
filledPolygon (array $points, ImageColor $color): void
Создает в изображении заполненный многоугольник. (подробнее)
filledRectangle (int $x1, int $y1, int $x2, int $y2, ImageColor $color): void
Создает прямоугольник, заполненный $color
, в изображении,
начиная с точки $x1
и $y1
и заканчивая точкой $x2
и
$y2
. Точка 0, 0 – это левый верхний угол изображения. (подробнее)
filledRectangleWH (int $left, int $top, int $width, int $height, ImageColor $color): void
Создает прямоугольник, заполненный $color
, в изображении,
начиная с точки $left
и $top
, шириной $width
и высотой
$height
. Точка 0, 0 – это левый верхний угол изображения.
fillToBorder (int $x, int $y, int $border, ImageColor $color): void
Выполняет заливку, цвет границы которой определяется $border
.
Начальная точка заливки – $x
, $y
(верхний левый угол – 0, 0),
и область заполняется цветом $color
. (подробнее)
filter (int $filtertype, int …$args): void
Применяет данный фильтр $filtertype
к изображению. (подробнее)
flip (int $mode): void
Переворачивает изображение с использованием заданного $mode
. (подробнее)
ftText (float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options=[]): array
Написать текст на изображении. (подробнее)
gammaCorrect (float $inputgamma, float $outputgamma): void
Применяет гамма-коррекцию к изображению относительно входной и выходной гаммы. (подробнее)
getClip(): array
Возвращает текущую область обрезки, т.е. область, за пределами которой пиксели не будут нарисованы. (подробнее)
getHeight(): int
Возвращает высоту изображения.
getImageResource(): resource|GdImage
Возвращает исходный ресурс.
getWidth(): int
Возвращает ширину изображения.
interlace (?int $interlace=null): int
Включает или выключает режим чересстрочной развертки. Если режим чересстрочной развертки установлен и изображение сохраняется как JPEG, оно будет сохранено как прогрессивный JPEG. (подробнее)
isTrueColor(): bool
Определяет, является ли изображение truecolor. (подробнее)
layerEffect (int $effect): void
Установите флаг смешивания альфа для использования эффектов наложения слоев. (подробнее)
line (int $x1, int $y1, int $x2, int $y2, ImageColor $color): void
Рисует линию между двумя заданными точками. (подробнее)
openPolygon (array $points, ImageColor $color): void
Рисует на изображении открытый многоугольник. В отличие от
polygon()
, линия между последней и первой точкой не рисуется. (подробнее)
paletteCopy (Image $source): void
Копирует палитру из $source
в изображение. (подробнее)
paletteToTrueColor(): void
Преобразует изображение на основе палитры в полноцветное изображение. (подробнее)
place (Image $image, int|string $left=0, int|string $top=0, int $opacity=100): Image
Копирует $image
в изображение по координатам $left
и
$top
. Координаты можно указывать как целые числа в пикселях или
строки в процентах (например, '50%'
).
polygon (array $points, ImageColor $color): void
Создает в изображении многоугольник. (подробнее)
rectangle (int $x1, int $y1, int $x2, int $y2, ImageColor $color): void
Создает прямоугольник по заданным координатам. (подробнее)
rectangleWH (int $left, int $top, int $width, int $height, ImageColor $color): void
Создает прямоугольник по заданным координатам.
resize (int|string $width, int|string $height, int $flags=Image::OrSmaller): Image
Изменяет размер изображения, подробнее. Размеры
можно указывать как целые числа в пикселях или строки в процентах
(например, '50%'
).
resolution (?int $resX=null, ?int $resY=null): mixed
Устанавливает или возвращает разрешение изображения в DPI (точек на
дюйм). Если ни один из необязательных параметров не указан, текущее
разрешение возвращается как индексированный массив. Если указан
только $resX
, горизонтальное и вертикальное разрешение
устанавливаются на это значение. Если указаны оба необязательных
параметра, горизонтальное и вертикальное разрешение устанавливаются
на эти значения.
Разрешение используется только как метаинформация, когда изображения читаются и записываются в форматы, поддерживающие этот тип информации (в настоящее время PNG и JPEG). Это не влияет ни на какие операции рисования. Разрешение по умолчанию для новых изображений – 96 DPI. (подробнее)
rotate (float $angle, int $backgroundColor): Image
Поворачивает изображение на заданный $angle
в градусах. Центр
вращения – центр изображения, и повернутое изображение может иметь
другие размеры, чем исходное изображение. (подробнее)
Требует наличия Bundled GD extension, поэтому может работать не везде.
save (string $file, ?int $quality=null, ?int $type=null): void
Сохраняет изображение в файл.
Качество сжатия находится в диапазоне 0..100 для JPEG (по умолчанию 85), WEBP
(по умолчанию 80) и AVIF (по умолчанию 30) и 0..9 для PNG (по умолчанию 9). Если тип
не очевиден из расширения файла, вы можете указать его с помощью одной
из констант ImageType
.
saveAlpha (bool $saveflag): void
Устанавливает флаг, указывающий, следует ли сохранять полную информацию альфа-канала при сохранении изображений PNG (в отличие от одноцветной прозрачности).
Альфа-смешивание должно быть отключено (alphaBlending(false)
), чтобы
альфа-канал сохранялся в первую очередь. (подробнее)
scale (int $newWidth, int $newHeight=-1, int $mode=IMG_BILINEAR_FIXED): Image
Масштабирует изображение с использованием заданного алгоритма интерполяции. (подробнее)
send (int $type=ImageType::JPEG, ?int $quality=null): void
Выводит изображение в браузер.
Качество сжатия находится в диапазоне 0..100 для JPEG (по умолчанию 85), WEBP (по умолчанию 80) и AVIF (по умолчанию 30) и 0..9 для PNG (по умолчанию 9).
setBrush (Image $brush): void
Устанавливает изображение кисти, которое будет использоваться во
всех функциях рисования линий (например, line()
и polygon()
) при
рисовании специальными цветами IMG_COLOR_BRUSHED или IMG_COLOR_STYLEDBRUSHED. (подробнее)
setClip (int $x1, int $y1, int $x2, int $y2): void
Устанавливает текущую область обрезки, т.е. область, за пределами которой пиксели не будут нарисованы. (подробнее)
setInterpolation (int $method=IMG_BILINEAR_FIXED): void
Устанавливает метод интерполяции, который влияет на методы
rotate()
и affine()
. (подробнее)
setPixel (int $x, int $y, ImageColor $color): void
Рисует пиксель в заданной координате. (подробнее)
setStyle (array $style): void
Устанавливает стиль, который должны использовать все функции
рисования линий (например, line()
и polygon()
) при рисовании
специальным цветом IMG_COLOR_STYLED или линий изображений с цветом
IMG_COLOR_STYLEDBRUSHED. (подробнее)
setThickness (int $thickness): void
Устанавливает толщину линий при рисовании прямоугольников,
многоугольников, дуг и т. д. на $thickness
пикселей. (подробнее)
setTile (Image $tile): void
Устанавливает изображение плитки, которое будет использоваться во
всех функциях заполнения областей (например, fill()
и
filledPolygon()
) при заполнении специальным цветом IMG_COLOR_TILED.
Плитка – это изображение, используемое для заполнения области
повторяющимся узором. Любое изображение можно использовать как
плитку, и, установив прозрачный индекс цвета изображения плитки с
помощью colorTransparent()
, можно создать плитку, где будут просвечивать
определенные части подлежащей области. (подробнее)
sharpen(): Image
Повышает резкость изображения.
Требует наличия Bundled GD extension, поэтому может работать не везде.
toString (int $type=ImageType::JPEG, ?int $quality=null): string
Сохраняет изображение в строку.
Качество сжатия находится в диапазоне 0..100 для JPEG (по умолчанию 85), WEBP (по умолчанию 80) и AVIF (по умолчанию 30) и 0..9 для PNG (по умолчанию 9).
trueColorToPalette (bool $dither, int $ncolors): void
Преобразует изображение truecolor в палитровое. (подробнее)
ttfText (float $size, float $angle, int $x, int $y, ImageColor $color, string $fontFile, string $text, array $options=[]): array
Выводит заданный текст на изображение. (подробнее)