O que é o LiipImagineBundle?
O LiipImagineBundle é um pacote para o Symfony que permite manipular imagens de forma simples e eficiente. Com ele, é possível redimensionar, cortar, aplicar filtros e diversas outras transformações em imagens, de forma fácil e rápida.
Como instalar o LiipImagineBundle no Symfony?
Para instalar o LiipImagineBundle no Symfony, é necessário adicionar a dependência no arquivo composer.json do seu projeto e depois executar o comando “composer update” na linha de comando. Em seguida, é necessário registrar o pacote no arquivo AppKernel.php, adicionando a linha “new LiipImagineBundleLiipImagineBundle()” no array de bundles.
Como criar um filtro de imagem no LiipImagineBundle?
Para criar um filtro de imagem no LiipImagineBundle, é necessário criar uma classe que implemente a interface FilterInterface e definir os métodos de manipulação de imagem. Em seguida, é possível registrar o filtro no arquivo de configuração do pacote, informando o nome do filtro e a classe que o implementa.
namespace AppBundleFilter;
use LiipImagineBundleImagineFilterFilterInterface;
use LiipImagineBundleImagineImageInterface;
class SepiaFilter implements FilterInterface
{
public function apply(ImageInterface $image)
{
// Aplica um efeito de sépia na imagem
}
}
Como usar o LiipImagineBundle em um controlador no Symfony?
Para usar o LiipImagineBundle em um controlador no Symfony, é necessário injetar o serviço “liip_imagine.cache.manager” na ação do controlador e utilizar a função “getBrowserPath” para obter o caminho da imagem manipulada. Em seguida, é possível enviar a imagem para o navegador, utilizando a função “file_get_contents” e definindo os cabeçalhos corretamente.
namespace AppBundleController;
use LiipImagineBundleImagineCacheCacheManager;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ImageController extends Controller
{
public function indexAction(Request $request, CacheManager $cacheManager)
{
$path = $cacheManager->getBrowserPath('/path/to/image.jpg', 'thumb');
$content = file_get_contents($path);
$response = new Response($content);
$response->headers->set('Content-Type', 'image/jpeg');
return $response;
}
}
Como configurar a cache do LiipImagineBundle?
Para configurar a cache do LiipImagineBundle, é necessário definir o diretório de cache no arquivo de configuração do pacote e garantir que o diretório possua permissões de escrita pelo servidor web. Em seguida, é possível definir o tempo de expiração da cache para cada filtro no mesmo arquivo de configuração.
# app/config/config_liip_imagine.yaml
liip_imagine:
data_loader:
filesystem:
root: %kernel.project_dir%/public
filter_sets:
cache: ~
thumbnail:
quality: 75
filters:
thumbnail: { size: [120, 90], mode: outbound }
sepia:
quality: 75
filters:
sepia: ~
cache: long
Como utilizar o LiipImagineBundle com o Twig?
Para utilizar o LiipImagineBundle com o Twig, é necessário adicionar a extensão “liip_imagine.twig.extension” no arquivo de configuração do Twig e, em seguida, utilizar a função “imagine_filter” para aplicar os filtros na imagem. A função recebe como parâmetro o caminho da imagem original e o nome do filtro que será aplicado.
{% extend '::base.html.twig' %}
{% block content %}
 | imagine_filter('thumbnail') }})
{% endblock %}
Como manipular imagens armazenadas no banco de dados com o LiipImagineBundle?
Para manipular imagens armazenadas no banco de dados com o LiipImagineBundle, é necessário criar um serviço que implemente a interface DataManagerInterface e que seja capaz de obter a imagem a partir do objeto do banco de dados. Em seguida, é possível utilizar a função “loadFromData” do serviço “liip_imagine.data.manager” para carregar a imagem a partir dos dados.
namespace AppBundleService;
use LiipImagineBundleBinaryBinaryInterface;
use LiipImagineBundleModelFileBinary;
use LiipImagineBundleImagineDataDataManagerInterface;
use AppBundleEntityImagem;
class ImagemDataManager implements DataManagerInterface
{
public function find($id)
{
$imagem = $this->em->getRepository(Imagem::class)->find($id);
return $imagem;
}
public function resolve(BinaryInterface $binary, $filter = null)
{
$fileBinary = new FileBinary($this->getBinaryData($binary));
return $this->imagine->load($fileBinary)->copy();
}
private function getBinaryData(BinaryInterface $binary)
{
$data = $binary->getContent();
return $data;
}
}
Como definir um prefixo para as rotas do LiipImagineBundle?
Para definir um prefixo para as rotas do LiipImagineBundle, é necessário adicionar a opção “base_path” no arquivo de configuração do pacote, definindo o valor do prefixo que deverá ser adicionado às rotas. Em seguida, é necessário limpar o cache do Symfony com o comando “php bin/console cache:clear” na linha de comando.
# app/config/config_liip_imagine.yaml
liip_imagine:
base_path: "/imagens"
Como definir a qualidade de imagem com o LiipImagineBundle?
Para definir a qualidade de imagem com o LiipImagineBundle, é necessário adicionar a opção “quality” no arquivo de configuração do filtro desejado, definindo o valor de qualidade que deverá ser utilizado. É importante ressaltar que a qualidade é definida em uma escala de 0 a 100.
# app/config/config_liip_imagine.yaml
liip_imagine:
filter_sets:
thumbnail:
quality: 75
Como usar o LiipImagineBundle para redimensionar imagens mantendo a proporção?
Para redimensionar imagens mantendo a proporção com o LiipImagineBundle, é necessário utilizar o filtro “resize” com a opção “mode” definida como “outbound”. Esta opção faz com que o filtro respeite a proporção da imagem, gerando uma imagem com dimensões menores ou iguais às definidas.
{% extend '::base.html.twig' %}
{% block content %}
 | imagine_filter('thumbnail') }})
{% endblock %}
liip_imagine:
filter_sets:
thumbnail:
quality: 75
filters:
resize:
size: [120, 90]
mode: outbound