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);
Комментарии:
Оставить комментарий:
* Просьба все технические вопросы, которые могут потребовать обсуждения, задавать на форуме.
** все некорректные и рекламные посты будут удаляться, ненормативная лексика и оскорбительные высказывания запрещаются.