#Форматы изображений
Поддерживаемые форматы изображений зависят от используемого драйвера. С Imagick и libvips можно читать все форматы, которые поддерживает сама библиотека, и записывать форматы, перечисленные ниже. С GD читаемыми и записываемыми являются только форматы, указанные ниже.
Подробнее о кодировании различных форматов изображений читайте в разделе вывода.
| Формат | GD | Imagick | libvips |
|---|---|---|---|
| JPEG | ✅ | ✅ | ✅ |
| GIF | ✅ | ✅ | ✅ |
| Анимированный GIF | ✅ | ✅ | ✅ |
| PNG | ✅ | ✅ | ✅ |
| AVIF | ✅ | ✅ | ✅ |
| Bitmap | ✅ | ✅ | ✅ |
| WebP | ✅ | ✅ | ✅ |
| Анимированный WebP | ❌ | ✅ | ✅ |
| TIFF | ❌ | ✅ | ✅ |
| JPEG 2000 | ❌ | ✅ | ✅ |
| HEIC | ❌ | ✅ | ✅ |
Обратите внимание, что не все форматы изображений всегда включены в расширения PHP для работы с изображениями. Поэтому возможно, что библиотека GD установлена, но собрана без поддержки Jpeg, или, например, Imagick доступна без поддержки Webp.
Все эти форматы изображений можно читать из разных источников. В частности:
- Путь в файловой системе
- Сырые бинарные данные изображения
- Данные изображения, закодированные в Base64
- Data Uri Scheme
- Ресурс указателя на файл
SplFileInfo, от которого наследуютсяIlluminate\Http\UploadedFileиSymfony\Component\HttpFoundation\File\UploadedFile- Экземпляр Intervention Image (
Intervention\Image\Image) - Закодированное изображение Intervention Image (
Intervention\Image\EncodedImage) - Драйвер-специфичное изображение (экземпляр
GDImageилиImagick)
#Проверка поддержки форматов изображений
public DriverInterface::supports(string|Format|FileExtension|MediaType $identifier): bool
Этот метод можно использовать во время выполнения, чтобы узнать, поддерживается ли конкретный формат.
Он проверяет, поддерживается ли требуемый формат текущим драйвером и собрана ли соответствующая расширяющая библиотека с необходимой поддержкой, возвращая true, если выполняются оба условия.
#Параметры
| Name | Type | Description |
|---|---|---|
| identifier | string, Format, FileExtension or MediaType | Идентификатор формата изображения, который можно передать либо как строку расширения файла, либо как строку media type, либо как член перечисления. |
#Пример
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver
use Intervention\Image\Format;
use Intervention\Image\MediaType;
use Intervention\Image\FileExtension;
$manager = ImageManager::withDriver(ImagickDriver::class);
// check by file extension if driver supports jpeg format
$result = $manager->driver()->supports('jpg');
// check by media type if driver supports jpeg format
$result = $manager->driver()->supports('image/jpeg');
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(Format::JPEG);
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(MediaType::IMAGE_JPEG);
// check by enum member if driver supports jpeg format
$result = $manager->driver()->supports(FileExtension::JPG);
#Цветовые форматы
Библиотека поддерживает несколько форматов для задания цветов в своих методах.
Входные значения для цветов могут отличаться от фактического цветового пространства изображения. Поэтому возможно рисовать на CMYK-изображении, задавая цвет в HSV. Цвета автоматически конвертируются в целевое цветовое пространство.
#Строковый формат
#Шестнадцатеричный строковый формат
Вы можете передавать цвета как RGB hex-триплеты, которые обычно используются в HTML и CSS. Можно использовать как сокращённый, так и полный формат, с альфа-каналом или без него. Лидирующий # необязателен.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// Создать новое изображение с красным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b53717');
// Создать новое изображение с полупрозрачным красным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b5371766');
#RGB строковый формат
Строковые значения RGB в функциональной нотации также поддерживаются. Чтобы включить значение альфа, используйте префикс RGBA, как показано в примере.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// Создать новое изображение с полупрозрачным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgba(15, 20, 255, .5)');
// Создать новое изображение с красным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgb(255, 0, 0)');
#CMYK строковый формат
Строковые значения CMYK в функциональной нотации также поддерживаются.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// Создать новое изображение с фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('cmyk(100, 100, 55, 60)');
#HSV/HSB строковый формат
Также можно передавать строковые значения цвета в альтернативном RGB формате — HSV/HSB.
use Intervention\Image\ImageManager;
// Создать новое изображение с полупрозрачным фоном
$image = ImageManager::imagick()->read('example.jpg');
// Нарисовать цветной пиксель
$image->drawPixel(120, 200, 'hsv(230, 15, 75)');
#HSL строковый формат
Также возможно передавать строковые значения цвета в формате HSL.
use Intervention\Image\ImageManager;
// Создать новое изображение с полупрозрачным фоном
$image = ImageManager::imagick()->read('example.jpg');
// Залить изображение цветом
$image->fill(120, 200, 'hsl(100, 15, 10)');
#Имена цветов HTML
Intervention Image может распознавать цвета из расширенного набора из 140 HTML-имен цветов спецификации W3C.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// Создать новое изображение с полупрозрачным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('steelblue');
#Прозрачность
Если необходимо указать прозрачность как цвет, это всегда можно сделать с помощью ключевого слова transparent.
use Intervention\Image\ImageManager;
$manager = ImageManager::gd();
$image = $manager->read('images/example.png');
$image->pad(300, 200, 'transparent');
#Объекты цвета
Цвета также можно задавать в виде объектов. В настоящее время для каждого цветового пространства предусмотрён свой класс цвета.
#RGB объект цвета
RGB-объект цвета использует три параметра для базовых каналов, а также необязательный параметр альфа-канала, который по умолчанию считается полностью непрозрачным.
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\Colors\Rgb\Color;
// Создать новое изображение с полупрозрачным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(45, 0, 10, .5));
// Создать новое изображение с красным фоном
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(255, 0, 0));
#CMYK объект цвета
CMYK-объект цвета конструируется с использованием четырёх параметров, соответствующих четырём каналам цветового пространства.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Cmyk\Color;
// Создать новое изображение с полупрозрачным фоном
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(100, 100, 55, 60));
#HSV/HSB объект цвета
Конструктор HSV/HSB-объекта цвета принимает три параметра: Hue, Saturation и Value/Brightness.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsv\Color;
// Создать новое изображение с полупрозрачным фоном
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#HSL объект цвета
Конструктор HSL-объекта цвета принимает три параметра: Hue, Saturation и Luminance.
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsl\Color;
// Создать новое изображение с полупрозрачным фоном
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#Цветовые пространства
Доступные цветовые пространства в первую очередь определяются используемым драйвером. Драйвер Imagick поддерживает как RGB, так и CMYK, тогда как драйвер GD поддерживает только RGB. Цветовое пространство по умолчанию для вновь создаваемых изображений — RGB.
При использовании драйвера GD в Intervention Image чтение CMYK-изображений автоматически конвертирует их в RGB, что может привести к отклонениям в цветопередаче.
Поскольку драйвер GD не поддерживает CMYK, его не рекомендуется использовать с CMYK-изображениями.
Читайте о том, как читать и изменять цветовое пространство в разделе Meta Information.
#Конвертация цветов в другие цветовые пространства или форматы
Цвета всегда можно конвертировать в поддерживаемые цветовые пространства. Это возможно даже если драйвер не поддерживает требуемое цветовое пространство.
Объекты цвета также можно конвертировать в следующие форматы.
Intervention\Image\Colors\Rgb\ColorspaceIntervention\Image\Colors\Cmyk\ColorspaceIntervention\Image\Colors\Hsv\ColorspaceIntervention\Image\Colors\Hsl\Colorspace
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Colors\Hsv\Colorspace as HsvColorspace;
// read RGB image from filesystem
$manager = new ImageManager(new Driver());
$image = $manager->read('example.jpg');
// retrieve color of pixel at given position
$color = $image->pickColor(100, 100);
// convert color to HSV format
$color = (string) $color->convertTo(HsvColorspace::class); // 'hsv(220, 10, 65)'