LiipImagineBundle - бандл для манипуляции изображениями в Symfony2. Так написано в документации, но документацию мы читаем обычно в крайнем случае, поэтому, проще говоря, это бандл для удобного создания превью-изоражений. Допустим, есть у вас в новости картинка 2000х1500px. Ее нельзя показывать в исходном виде, т.к. она сожрет весь трафик и страница будет весить адски много, соответственно нужно ужать картинку до адекватных размеров, т.е. показать уменьшенную копию. Этим и занимается данный бандл.
Как обычно, используем Composer:
$ php composer.phar require "liip/imagine-bundle:dev-master"
Затем добавляем бандл в AppKernel.php:
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Liip\ImagineBundle\LiipImagineBundle(),
);
// ...
}
И не забываем добавить роуты:
# app/config/routing.yml
_liip_imagine:
resource: "@LiipImagineBundle/Resources/config/routing.xml"
По сути настройка заключается в создании "размеров картинки". Т.е. мы создаем именованный набор параметров по которым изображение будет ужато-прежато и сманипулировано. Давайте посмотрим на полный стандартный конфиг:
liip_imagine:
resolvers:
default:
web_path:
web_root: ~ # %kernel.root_dir%/../web
cache_prefix: ~ # media/cache
loaders:
default:
filesystem:
data_root: ~ # %kernel.root_dir%/../web/
driver: gd # Я бы рекомендовал использовать imagick
cache: default
data_loader: default
controller:
filter_action: liip_imagine.controller:filterAction
filter_runtime_action: liip_imagine.controller:filterRuntimeAction
filter_sets:
# Прототип для параметров ресайза изображения
name:
path: ~
quality: 100
animated: false
format: ~
cache: ~
data_loader: ~
controller: ~
route: []
filters:
# Прототип фильтра
name: []
Конечно никто не заставляет писать весь этот конфиг, давайте для примера обойдемся минимальным:
# app/config/config.yml
liip_imagine:
resolvers:
default:
web_path: ~
filter_sets:
cache: ~
my_thumb:
quality: 75
filters:
thumbnail: { size: [120, 90], mode: outbound }
Итак, мы создали и описали фильтр my_thumb: качество изображения 75, сделать превью размером 120х90. На самом деле бандл содержит множество готовых фильтров, например, для создания вотермарка, поворота изображения, обрезания, растягивая/сжатия и даже авто-поворота изображения на основе EXIF данных. Само собой, можно создавать свои фильтры и описывать их поведение в виде обычных PHP классов, хотя для 99% задач вам хватит и стандартного набора.
Фильтр то мы создали, что дальше? Нужно показать наше уменьшенное изображение. В шаблоне это делается так:
<img src="{{ '/relative/path/to/image.jpg' | imagine_filter('my_thumb') }}" />
Система сгенерирует путь вида /media/cache/my_thumb/relative/path/to/image.jpg, но само изображение будет создано только при первом обращении по этой ссылке, поэтому о производительности можно не беспокоиться, все на высшем уровне.
Более подробно о возможностях бандла можно узнать из документации.