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);

 

 
Опубликовано: Alex
Комментарии: (0)
Рейтинги:  
0

Теги:

Нет тегов

Комментарии:


Комментарии отсутствуют

Оставить комментарий:

* Просьба все технические вопросы, которые могут потребовать обсуждения, задавать на форуме.
** все некорректные и рекламные посты будут удаляться, ненормативная лексика и оскорбительные высказывания запрещаются.

* Для редактирования комментария осталось 15 минут