Работа с изображениями
Класс Nette\Utils\Image позволяет легко манипулировать изображениями, например, изменять размер, обрезать, повышать резкость, рисовать или соединять несколько изображений.
PHP имеет обширный набор функций для работы с изображениями. Но их API не очень удобен. Это был бы не Nette Framework, если бы не придумали сексуальный API.
Установка:
composer require nette/utils
Во всех примерах предполагается, что псевдоним уже создан:
use Nette\Utils\Image;
use Nette\Utils\ImageColor;
use Nette\Utils\ImageType;
Создание изображения
Создайте новое истинно цветное изображение, например, размером 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%'); // flip vertical
$flipped = $image->resize('-100%', '-100%'); // rotate 180°
$flipped = $image->resize(-125, 500); // resize & flip horizontal
После уменьшения изображения можно улучшить его внешний вид с помощью тонкой настройки резкости:
$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); // Red
$transparentBlue = ImageColor::rgb(0, 0, 255, 0.5); // Semi-transparent blue
Метод ImageColor::hex()
позволяет задать цвет, используя
шестнадцатеричный формат, аналогично CSS. Он поддерживает форматы
#rgb
, #rrggbb
, #rgba
и #rrggbbaa
:
$color = ImageColor::hex("#F00"); // Red
$transparentGreen = ImageColor::hex("#00FF0080"); // Semi-transparent green
Цвета могут использоваться и в других методах, таких как 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
Создает новое истинно цветное изображение заданных размеров. По умолчанию используется черный цвет.
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
Возвращает массив поддерживаемых типов изображений (константы
ImageType::XXX
).
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
Позволяет использовать два различных режима рисования в трехцветных
изображениях. В режиме наложения компонент альфа-канала цвета,
используемый во всех функциях рисования, таких как setPixel()
,
определяет, в какой степени базовый цвет должен просвечивать. В
результате в этот момент существующий цвет автоматически смешивается
с цветом рисунка, и результат сохраняется в изображении. В результате
пиксель становится непрозрачным. В режиме без смешивания цвет
мультфильма копируется дословно с информацией альфа-канала и
заменяется на целевой пиксель. Режим наложения недоступен при
рисовании на изображениях палитры. (подробнее)
antialias(bool $on): void
Активация рисования сглаженных линий и многоугольников. Не поддерживает альфа-каналы. Работает только с трехцветными изображениями.
Использование сглаженного примитива с прозрачным цветом фона может привести к неожиданным результатам. Метод смешивания использует цвет фона как любой другой цвет. (подробнее)
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
Записывает заданный текст в изображение. (подробнее)