Image bundle
Компонент для работы с изображениями. Работает как с библиотекой GD, так и с ImageMagick. Последняя поддерживает большее количество форматов изображений, в т.ч. HEIC/HEIF, которые используются в смартфонах iPhone от Apple.
По умолчанию, если устанвлена ImageMagick, то используется она.
Чтобы использовать этот компонент в Ваших расширениях, добавте в начало php-файла
<?php use image\Image;
Получить используемый драйвер:
$driver = Image::currentDriver();
Метод возвращает одну из констант: Image::DRIVER_IMAGICK или Image::DRIVER_GD или null, если ни одна из библиотек недоступна и обработка изображений невозможна.
Получить список поддерживаемых форматов в виде массива:
$supportedFormats = Image::supportedFormats();
Загрузка изображения для дальнейшей обработки:
$image = Image::load($path, ?array $options = null);
в $path можно передать
- строку с путем к файлу или URL удаленного файла
- ресурс, полученный от fopen()
- строку с бинарными данными, содержащими избражение или строку закодированную в base64 c бинарными данными изображения
- data URL
в $options можно указать какой именно использовать, например:
$image = Image::load('/path/to/file', ['driver' => Image::DRIVER_GD]);
Этот метод возвращает экземпляр класса \image\imagick\Image или \image\gd\Image, которые являются наследниками класса \image\AbstractImage. Или будет выброшено исключение в случае неудачи.
Методы класса для работы с изображениями:
Можно получить экземпляр класса \Imagick или \GdImage|resource (в зависимости от используемой библиотеки) и работать с ними напрямую:
$image->getData();
Сохранить изображение:
$image->save(?string $fileName = null, ?int $quality = null, ?string $format = null);
$fileName - полный путь и имя файла для сохранения. Если не указано, то изменения будут сохранены в ранее загруженный файл. Иначе будет создан новый файл, а старый останется без изменений.
$quality - качество. Используется только если формат сохраняемого файла поддерживает этот параметр.
$format - формат сохраняемого изображения. Если не указано, будет использовано расширение файла.
Кодирование формата в указанный формат:
$image->encode(string $format, ?int $quality = null, ?string $fileName = null);
$format - формат изображения. Например: 'jpeg', 'png', 'heif'. Или 'data-url' для кодирования изображения в data Url;
$quality - качество. Используется только если формат сохраняемого файла поддерживает этот параметр.
$fileName - Имя файла для сохранения изображения. Если null - изображение будет возвращено в виде строки бинарных данных.
$image->crop(int $width, int $height, ?int $x = null, ?int $y = null);
Обрезает изображение.
Параметры $x и $y координаты правого верхнего угла области для нового изображения.
$width и $height - ширина и высота области нового изображения.
$image->fixOrientation();
Поворачивает изображение в соотвествии с данными об ориентации из EXIF
$image->flipHorizontally(); $image->flipVertically();
Отразить изображение горизонтально или вертикально соотвественно
$image->getWidth(); $image->getHeight();
Возвращают ширину и высоту изображения.
$image->getOrientation();
Возвращает ориентацию изображения из EXIF.
$image->paste(AbstractImage $image, $x, $y, $alpha = 100);
Вставляет одно изображение в другое. Может использоваться для наложения "водяного знака" или создания коллажей.
$image - вставляемое изображение. Экземпляр класса \image\imagick\Image или \image\gd\Image,
$x, $y - координаты левого верхнего угла вставляемого изображения
$alpha - прозрачность вставляемого изображения. 0 - полностью прозрачное. 100 - полностью непрозрачное.
$image->removeAnimation()
Удаление анимации. Gd и так не поддерживает анимацию. При использовании Imagick, в изображении будет оставлен только первый кадр.
$image->resize($width = null, $height = null, string $filter = Image::FILTER_UNDEFINED)
Изменение размера изображения.
$width, $height - новые ширина и высота изображения. Могут указываться как целое число в пикселях (1920) или процент ('80%'). Если ширина или высота не указана (null), то ее значение будет расчитано пропорционально.
$filter - фильтр применяемый для масштабирования. Одна из констант \image\Image::FILTER_XXX. GD не поддерживает фильтров и игнорирует этот параметер.
$image->rotate($angle, $background = null)
Поворачивает изображение на указанное количество градусов
$image->strip()
Удаляет EXIF данные из изображения. Gd удаляет эти данные в любом случае.
$image->thumbnail(
$width,
$height,
string $resize = Image::THUMBNAIL_OUTBOUND,
bool $upscale = false,
string $filter = Image::FILTER_LANCZOS
)
Создает миниатюру изображения
$width, $height - новые ширина и высота изображения. Могут указываться как целое число в пикселях (1920) или процент ('80%'). Если ширина или высота не указана (null), то ее значение будет расчитано пропорционально.
$resize - как создавать миниатюру. Одна из констант:
\image\Image::THUMBNAIL_OUTBOUND- масштабирует изображение пропорционально таким образом, чтобы его ширина и высота были не меньшне указанных размеров. Если вторая сторона при этом превышает указанное значение - она обрезается.\image\Image::THUMBNAIL_INSET- Исходное изображение масштабируется таким образом, чтобы оно полностью умещалось в размерах миниатюры (соотношение ширины и высоты изображения не меняется).\image\Image::THUMBNAIL_HEIGHT- Миниатюра масштабируется так, чтобы ее высота равнялась желаемой высоте (соотношение ширины и высоты изображения не меняется).\image\Image::THUMBNAIL_WIDTH- Миниатюра масштабируется так, чтобы ее ширина равнялась желаемой ширине (соотношение ширины и высоты изображения не меняется).
$upscale - увеливать изображение, если оно меньше указанных размеров.
$filter - фильтр применяемый для масштабирования. Одна из констант \image\Image::FILTER_XXX. GD не поддерживает фильтров и игнорирует этот параметер.
Пример использования. Сделаем из исходного изображения миниатюру 160x160 и сохраним ее в формате jpeg:
$image = Image::load('/path/to/image.heic');
// Сделаем миниатюру
$image->thumbnail(160, 160, Image::THUMBNAIL_OUTBOUND);
// Сохраним в формате JPEG
$image->save('/path/to/image_160x160.jpg', 80);
// Выгрузим изображение из памяти:
unset($image);
Комментарии: