#Laravel
Intervention Image можно легко интегрировать в приложение Laravel с помощью официального пакета интеграции. Этот пакет предоставляет провайдер сервисов Laravel, фасад, публикуемый файл конфигурации и многое другое.
#Установка
Вместо установки Intervention Image напрямую достаточно подключить пакет intervention/image-laravel. Соответствующие базовые библиотеки будут установлены автоматически.
composer require intervention/image-laravel
#Глобальная конфигурация приложения
Расширение поставляется с глобальным файлом конфигурации, который распознаётся Laravel. Это позволяет один раз централизованно сохранить настройки Intervention Image и не задавать их вручную при каждом вызове менеджера изображений.
Файл конфигурации можно скопировать в приложение с помощью следующей команды.
php artisan vendor:publish --provider="Intervention\Image\Laravel\ServiceProvider"
Эта команда опубликует файл конфигурации config/image.php. Здесь вы можете задать желаемый драйвер и его параметры конфигурации для Intervention Image. По умолчанию библиотека настроена на использование библиотеки GD для обработки изображений.
Файл конфигурации выглядит следующим образом.
return [
/*
|--------------------------------------------------------------------------
| Драйвер изображений
|--------------------------------------------------------------------------
|
| Intervention Image поддерживает “GD Library” и “Imagick” для внутренней обработки изображений.
| В зависимости от вашей конфигурации PHP вы можете выбрать один из них.
|
| Доступные варианты:
| - \Intervention\Image\Drivers\Gd\Driver::class
| - \Intervention\Image\Drivers\Imagick\Driver::class
|
*/
'driver' => \Intervention\Image\Drivers\Gd\Driver::class,
/*
|--------------------------------------------------------------------------
| Параметры конфигурации
|--------------------------------------------------------------------------
|
| Эти параметры управляют поведением Intervention Image.
|
| - "autoOrientation" определяет, должна ли импортированная картинка
| автоматически поворачиваться в соответствии с имеющимися данными Exif.
|
| - "decodeAnimation" решает, будет ли потенциально анимированное изображение
| декодировано как анимация или анимация будет отброшена.
|
| - "blendingColor" задаёт цвет смешивания по умолчанию.
|
| - "strip" управляет тем, должны ли метаданные, такие как теги Exif,
| удаляться при кодировании изображений.
*/
'options' => [
'autoOrientation' => true,
'decodeAnimation' => true,
'blendingColor' => 'ffffff',
'strip' => false,
]
];
Подробнее о различных опциях для выбора драйвера, настройке параметров для автоориентации, декодирования анимаций и смешивания цвета.
#Статический интерфейс фасада
Этот пакет также интегрирует доступ к центральной точке входа Intervention Image, ImageManager::class, через статический фасад. Вызов обеспечивает доступ к централизованно настроенному менеджеру изображений через паттерн singleton.
В следующем примере показано, как прочитать изображение из запроса загрузки через фасад изображений в маршруте Laravel и сохранить его на диск с случайным именем файла.
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\Laravel\Facades\Image;
Route::get('/', function (Request $request) {
$upload = $request->file('image');
$image = Image::read($upload)
->resize(300, 200);
Storage::put(
Str::random() . '.' . $upload->getClientOriginalExtension(),
$image->encodeByExtension($upload->getClientOriginalExtension(), quality: 70)
);
});
#Макрос ответа для изображения
image(Image $image, null|string|Format|MediaType|FileExtension $format = null, mixed ...$options)
Пакет включает макрос ответа, который можно использовать для удобного кодирования ресурса изображения и преобразования его в HTTP-ответ в один шаг.
Макрос автоматически формирует HTTP-заголовки ответа в соответствии с изображением и желаемым форматом вывода.
В следующем примере показано, как прочитать изображение с диска, применить к нему изменения и использовать макрос ответа для изображения, чтобы закодировать его и отправить пользователю одним вызовом. Требуется только первый параметр.
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Format;
use Intervention\Image\Laravel\Facades\Image;
Route::get('/', function () {
$image = Image::read(Storage::get('example.jpg'))
->scale(300, 200);
return response()->image($image, Format::WEBP, quality: 65);
});
#Symfony
Intervention Image можно также интегрировать в фреймворк Symfony. Удобный способ — использовать официальный бандл интеграции.
Хотя использование этой библиотеки интеграции не является строго обязательным, она предлагает удобный способ централизованной конфигурации в рамках Symfony.
#Установка
Вместо установки Intervention Image напрямую достаточно подключить бандл intervention/image-symfony. Соответствующие зависимости будут установлены автоматически.
composer require intervention/image-symfony
#Глобальная конфигурация приложения
После успешной установки вы можете активировать бандл в файле config/bundes.php вашего приложения Symfony, вставив следующую строку в массив.
return [
// ...
Intervention\Image\Symfony\InterventionImageBundle::class => ['all' => true],
];
Теперь вы можете настроить драйвер для Intervention Image. По умолчанию бандл использует библиотеку GD с Intervention Image. Эти и другие параметры можно настроить, создав файл config/packages/intervention_image.yaml и указав класс драйвера и параметры по умолчанию следующим образом.
intervention_image:
driver: Intervention\Image\Drivers\Gd\Driver
options:
autoOrientation: true
decodeAnimation: true
blendingColor: 'ffffff'
strip: false
Сначала выберите, например, один из двух поставляемых драйверов Intervention\Image\Drivers\Gd\Driver и Intervention\Image\Drivers\Imagick\Driver.
Далее вы можете использовать опции для определения поведения библиотеки. Подробнее о различных опциях для выбора драйвера, настройке параметров для автоориентации, декодирования анимаций и смешивания цвета.
#Внедрение зависимостей
Интеграция завершена, и теперь можно получить доступ к менеджеру изображений через внедрение зависимостей.
namespace App\Controller;
use Intervention\Image\ImageManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ExampleController extends AbstractController
{
#[Route('/')]
public function example(ImageManager $manager): Response
{
$image = $manager->read('images/example.jpg');
}
}