Может войдёшь?
Черновики Написать статью Профиль

Laravel и операции над изображениями с помощью Intervention Image

перевод

Сегодня мне надо было реализовать решение для изменения размеров изображения в фоновой обработке. Обычно сначала я беру оригинал, сохраняю его на локальный сервер, помещаю имя файла в очередь (в частности, Amazon SQS) и благодаря отличной поддержке задач artisan в Laravel я могу опрашивать очередь, просто написав:

shell$ php artisan queue:listen

Как быто ни было, мне надо было найти хороший инструмент обработки изображений для PHP. Раньше я использовал Imagine, ImageWorkshop, но мне нужно было простое решение, мы не делаем работы по фильтрации или другой обработке изображений на сервере, просто выполняем эти работы на клиенте и отправляем готовое изображение на сервер. В целом обе прежние библиотеки совершенны, но они как Photoshop. Вы можете делать всё, что угодно, но тяжело, и простой процесс вырезания может быть в них несколько сложнее.

В поисках пакета на Packagist я наткнулся на Intervention. Это полностью протестированный, лёгкий класс для изображений. Он умеет делать не так много вещей, но работает он отлично. И что важнее всего, он поддерживает работу с Laravel и имеет собственный сервис-провайдер и фасад. У него приятный, Laravel-овский синтаксис:

PHP
$image Image::make('path/to/the/image');

Так что он действительно мне понравился, одна из лучших вещей, которой он меня шокировал, это функция PHPgrab(). Она просто берёт лучшее возможное изображение при заданных ширине и высоте. Это как умное вырезание. Я знаю, я не могу точно выразиться, но этот пример из документации реально поможет вам понять смысл функции PHPgrab():

PHP
// вырезать наиболее подходяще по соотношению 5:3 (600x360) и изменить размер на 600x360 пикселей
$img->grab(600360);

// вырезать наиболее подходяще по соотношению 1:1 (200x200) и изменить размер на 200x200 пикселей
$img->grab(200);

Мы создаём несколько разных размеров одной фотографии для использования в различных целях. Одна из таких целей — миниатюра. Мне надо получить лучший квадрат из изображения, если оно не квадратное, чтобы сделать из него миниатюру. Поэтому PHPgrab() подойдёт для этого идеально.

Я просто делаю:

PHP
$image->grab(5050)                                    // получение лучшего квадрата,
      
->save(\Hash::make(                               // изменение размера на 50x50,
        
(new \DateTime)->getTimeStamp() . '.jpg'90    // сохранение его в jpg
      
);                                                // и установка качества 90.

Видите, это просто 1 строка кода с приятной последовательностью.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (2)

kolyafat

Дядя, а при чем тут intervention Что это вообще за отрывок мимолетной фантазии?

mirron

Он забыл добавить в начале :)

// import the Intervention Image Manager Class
use Intervention\Image\ImageManagerStatic as Image;

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.