Сегодня мне надо было реализовать решение для изменения размеров изображения в фоновой обработке. Обычно сначала я беру оригинал, сохраняю его на локальный сервер, помещаю имя файла в очередь (в частности, ((https://aws.amazon.com/sqs Amazon SQS))) и благодаря отличной поддержке задач %%(t)artisan%% в Laravel я могу опрашивать очередь, просто написав: %%(shell) $ php artisan queue:listen %% Как быто ни было, мне надо было найти хороший инструмент обработки изображений для PHP. Раньше я использовал ((http://imagine.readthedocs.org/en/latest/ Imagine)), ((http://phpimageworkshop.com/ ImageWorkshop)), но мне нужно было простое решение, мы не делаем работы по фильтрации или другой обработке изображений на сервере, просто выполняем эти работы на клиенте и отправляем готовое изображение на сервер. В целом обе прежние библиотеки совершенны, но они как Photoshop. Вы можете делать всё, что угодно, но тяжело, и простой процесс вырезания может быть в них несколько сложнее. В поисках пакета на ((https://packagist.org Packagist)) я наткнулся на ((http://intervention.olivervogel.net Intervention)). Это полностью протестированный, лёгкий %%(t)класс для изображений%%. Он умеет делать не так много вещей, но работает он отлично. И что важнее всего, он поддерживает работу с Laravel и имеет собственный сервис-провайдер и фасад. У него приятный, Laravel-овский синтаксис: %% $image = Image::make('path/to/the/image'); %% Так что он действительно мне понравился, одна из лучших вещей, которой он меня шокировал, это функция %%grab()%%. Она просто берёт лучшее возможное изображение при заданных ширине и высоте. Это как умное вырезание. Я знаю, я не могу точно выразиться, но этот пример из документации реально поможет вам понять смысл функции %%grab()%%: %% // вырезать наиболее подходяще по соотношению 5:3 (600x360) и изменить размер на 600x360 пикселей $img->grab(600, 360); // вырезать наиболее подходяще по соотношению 1:1 (200x200) и изменить размер на 200x200 пикселей $img->grab(200); %% Мы создаём несколько разных размеров одной фотографии для использования в различных целях. Одна из таких целей - миниатюра. Мне надо получить лучший квадрат из изображения, если оно не квадратное, чтобы сделать из него миниатюру. Поэтому %%grab()%% подойдёт для этого идеально. Я просто делаю: %% $image->grab(50, 50) // получение лучшего квадрата, ->save(\Hash::make( // изменение размера на 50x50, (new \DateTime)->getTimeStamp() . '.jpg', 90 // сохранение его в jpg ); // и установка качества 90. %% Видите, это просто 1 строка кода с приятной последовательностью.