Search by

phphleb / imageresizer

phphleb

Custom image resizing with automatic Imagick/GD fallback

Package info

github.com/phphleb/imageresizer

pkg:composer/phphleb/imageresizer

Statistics

Installs: 1 035

Dependents: 2

Suggesters: 0

Stars: 4

Open Issues: 0

v2.0.8 2026-10-13 14:03 UTC

This package is auto-updated.

Last update: 2026-10-13 14:13:57 UTC


README

Библиотека предназначена для настраиваемого изменения размеров изображения. Улучшение стандартного класса.

Инициализация

use Phphleb\Imageresizer\SimpleImage;

$image = new SimpleImage();

// Путь к исходному файлу в формате JPEG, GIF, WEBP, BMP, WBMP или PNG
$image->load("/path/to/picture.jpg");

Получение данных

// Формат исходного изображения "jpeg", "gif", "webp", "bmp", "wbmp" или "png"
var_dump($image->getImageFormat());
// Ширина в пикселах
var_dump($image->getWidth());
// Высота в пикселах
var_dump($image->getHeight());
// Путь до исходного файла
var_dump($image->getFilePath());
// Объект Imagick для включения в другое изображение
$image->getImagick();
// GD-ресурс (PHP 7) или объект GdImage (PHP 8)
$image->getGd();

getImage() устарел: он остаётся для обратной совместимости, но может вернуть объект любого обработчика. Используйте getImagick() или getGd(). Если запрошен объект обработчика, отличный от принудительно выбранного (или фактически использованного после загрузки), метод бросит ImageError с кодом PROCESSOR_MISMATCH.

Изменение размеров

// В пикселах по ширине
$image->resizeToWidth(650);
// В пикселах по высоте
$image->resizeToHeight(650);
// По ширине и высоте непропорционально
$image->resize(400, 200);
// В процентах
$image->scale(50);
// По центру с обрезанием по меньшей стороне
$image->resizeInCenter(100, 200);
// По центру без обрезания (прозрачный фон для PNG)
$image->resizeAllInCenter(128, 200);
// По центру без обрезания (задается цвет фона для всех типов изображений)
$image->resizeAllInCenter(128, 200, "#ffc025");
// По центру без обрезания (задается цвет фона в формате RGB)
$image->resizeAllInCenter(128, 200, $image->addRgbColor(115, 70, 188));

Кадрирование области

// Кадрирование без изменения масштаба (ширина и высота, отступ слева, отступ сверху)
$image->cropBySelectedRegion(500, 300, 10, 15);

Вывод изображения в браузер

header("Content-type: image/jpeg");
$image->output();

или

header("Content-type: image/png");
$image->output("png");

Сохранение в файл

// В тот же файл
$image->save("/path/to/picture.jpg", "jpeg");
// С другим расширением и названием
$image->save("/path/to/picture2.png", "png");
// Изменение исходного jpeg-изображения с указанием сжатия для JPEG
$image->save($image->getFilePath(), "jpeg", 80);

Проверка

Проверки не подавляют стандартный вывод ошибок PHP

//  Инициализация загруженного изображения
if ($image->load("/path/to/picture.jpg")){
	// success
} else {
	// error
}
// При выводе в браузер
if ($image->output("gif")){
	// success
} else {
	// error
}
// При сохранении изображения
if ($image->save("/path/to/picture.jpg", "jpeg")){
	// success
} else {
	// error
}

Выбор обработчика

По умолчанию выбирается GD. Если GD недоступен или не смог открыть конкретный файл, в автоматическом режиме будет предпринята попытка через Imagick. Если доступен только Imagick, он используется автоматически. При отсутствии обоих расширений load() бросит ImageError; это же исключение бросает setProcessorVersion(), если явно выбран недоступный обработчик.

// Выбор обработчика перед загрузкой файла
$image->setProcessorVersion(SimpleImage::PROCESSOR_IMAGICK);

// Или принудительно GD
$image->setProcessorVersion(SimpleImage::PROCESSOR_GD);

// Автоматический выбор
$image->setProcessorVersion(SimpleImage::PROCESSOR_AUTO);

// Используемый обработчик
var_dump($image->getProcessorVersion());
try {
    $image->setProcessorVersion(SimpleImage::PROCESSOR_IMAGICK);
} catch (\Phphleb\Imageresizer\Src\ImageError $error) {
    echo $error->getMessage();
}

ICC-профили

При работе через GD запись и преобразование ICC недоступны.

// Добавить профиль, если его нет
$image->setProfile(SimpleImage::PROFILE_SRGB);

// Задать профиль из собственного ICC-файла
$image->setProfile("/path/to/profile.icc");

// Принудительно заменить существующий профиль
$image->setProfile("/path/to/profile.icc", true);

// Преобразовать цвета в sRGB после загрузки файла
$image->convertToProfile(SimpleImage::PROFILE_SRGB);

setProfile() только назначает профиль, не изменяя пиксели. convertToProfile() преобразует цвета из исходного ICC в целевой. Если исходного ICC нет, сначала явно назначьте правильный профиль через setProfile(). Для RGB подходят RGB-профили (sRGB, Display P3), для CMYK — CMYK-профили; ошибочное назначение меняет цвета.

Цветовое пространство и профиль

// Семейство цветового пространства пикселей: RGB, CMYK, GRAY и др. (или null до загрузки)
var_dump($image->getImageColorspace());

// Имя встроенного ICC-профиля или null при его отсутствии
var_dump($image->getProfileName());

Определение RGB не означает наличие sRGB-профиля. Для правильного назначения ICC нужно знать исходное цветовое пространство.

Метаданные

// Обычная загрузка: удалить лишние метаданные при сохранении
$image->load("/path/to/picture.jpg");

// Сохранить исходные метаданные (Imagick)
$image->load("/path/to/picture.jpg", false);

Ошибки

При неудаче load(), save(), output() и других методов возвращается false. Методы изменения размеров ничего не возвращают; ошибка доступна через getError(). Исключение — отсутствие обоих обработчиков при load(), явный выбор недоступного обработчика и запрос getImagick()/getGd() для другого обработчика: в этих случаях бросается ImageError.

if (!$image->load("/path/to/picture.jpg")) {
    echo $image->getError()->getMessage();
}

При отсутствии ошибки getError() возвращает null.

PHP