В Laravel-приложениях часто приходится обрабатывать изображения. Например, уменьшать загружаемые аватары до фиксированного размера, обрезать, конвертировать в другие форматы или добавлять водяные знаки. В этой статье мы посмотрим, как использовать пакет Intervention Image (intervention/image) для таких задач в Laravel.
Что такое Intervention Image
Intervention Image - это open-source библиотека на PHP для создания и редактирования изображений. Она работает поверх библиотек GD или Imagick, предоставляя единый удобный API, благодаря чему можно переключаться между этими библиотеками, не меняя код.
Когда использовать Intervention Image в Laravel
Этот инструмент пригодится, когда нужно:
изменить размер изображения (например, превратить аватар в квадрат 250 × 250),
обрезать часть изображения,
повернуть по ориентации из EXIF-данных,
конвертировать изображение (например, из JPG в PNG),
добавить водяной знак.
Установка пакета
Для начала убедитесь, что в вашем окружении установлены расширения GD или Imagick. Laravel-интеграция идет через отдельный пакет intervention/image-laravel, который добавляет провайдер и фасад для удобства использования.
Установите его следующей коммандой:
composer require intervention/image-laravelИ опубликуйте конфигурационный файл:
php artisan vendor:publish --provider="Intervention\Image\Laravel\ServiceProvider"В config/image.php можно выбрать драйвер (GD или Imagick) и задать дополнительные опции, например автоматическую ориентацию или цвет смешивания.
Чтение изображений
Чтобы начать обработку изображения, его нужно прочитать. Простой пример - открытие картинки по пути:
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Laravel\Facades\Image;
$image = Image::read(Storage::path('images/avatar-image.jpg'));Также можно сначала получить содержимое файла через Storage::get и передать данные в Image::read(). При загрузке файлов в контроллер вы можете сразу читать их из запроса:
Route::post('/avatar', function (Request $request) {
$image = Image::read($request->file('avatar'));
// ...
});Для тяжёлых обработок имеет смысл сохранять исходник и выполнять редактирование в очередях, чтобы не замедлять ответ пользователю.
Чтение метаданных
У объекта изображения есть методы для получения EXIF-данных, размера, ширины и высоты:
$exif = $image->exif();
$width = $image->width();
$height = $image->height();Текущий пример EXIF-данных может содержать размер файла, MIME-тип, ширину/высоту и другое. Если EXIF отсутствует, метод вернёт null.
Изменение размера
Intervention Image предоставляет несколько способов изменить размеры:
resize()задаёт точные размеры,scale()масштабирует с сохранением пропорций,scaleDown()масштабирует так, чтобы не превышать заданные размеры.
Вот примеры:
$image->resize(width: 100, height: 100);
$image->scale(width: 100);
$image->scale(width: 120, height: 100);После обработки изображение можно сохранить:
$resized->save(Storage::path('images/avatar-image-resized.jpg'));
// Чтобы повернуть изображение на нужный угол:
$rotated = $image->rotate(-90);
$rotated->save(Storage::path('images/avatar-image-rotated.jpg'));
// Обрезка. Например, чтобы вырезать квадрат 2500 × 2500px из центра:
$cropped = $image->crop(width: 2500, height: 2500, position: 'center');
$cropped->save(Storage::path('images/avatar-image-cropped.jpg'));Можно также объединять операции, например: обрезать → изменить размер → сохранить.
Конвертация форматов
Для изменения формата изображения используются методы вроде toPng(), toWebp(), toJpeg(). Пример:
Image::read($data)->toWebp()->save(Storage::path('images/avatar-image.webp'));Это удобно, если вам нужна оптимизация размера файлов или поддержка современных форматов.
Водяные знаки
Чтобы добавить водяной знак (например, логотип), можно использовать метод place():
Image::read($source)
->crop(width: 2500, height: 2500)
->scale(width: 500, height: 500)
->place(
element: Storage::get('images/logo.png'),
position: 'bottom-right',
offset_x: 10,
offset_y: 10,
opacity: 70
)
->save(Storage::path('images/avatar-watermarked.jpg'));Здесь логотип вставляется в правый нижний угол с небольшой отступом и заданной прозрачностью.

Подведение итогов
Intervention Image - это мощный и простой инструмент для обработки изображений в Laravel. Он покрывает основные задачи: чтение, изменение размера, обрезка, поворот, конвертация форматов, водяные знаки и работу с метаданными.