Install the Package Require the package via Composer:
composer require david-garcia/liip-imagine-pack
Ensure LiipImagineBundle is already installed (Symfony 7.x + PHP 8.x).
Enable the Bundle
Add to config/bundles.php:
DavidGarcia\LiipImaginePack\LiipImaginePackBundle::class => ['all' => true],
Configure Filters
Add filter sets to config/packages/liip_imagine.yaml:
liip_imagine:
filter_sets:
blur_example:
filters:
blur_filter:
start: [0, 0]
size: [100, 100]
pixelate_example:
filters:
pixelate_filter:
start: [0, 0]
size: [50, 50]
First Use Case Generate a blurred/pixelated image in a controller:
use Liip\ImagineBundle\Service\Filter\FilterConfiguration;
public function applyFilter(FilterConfiguration $filterManager)
{
$filter = $filterManager->getFilterConfiguration('blur_example');
$imagePath = $filter->applyFile('/path/to/image.jpg');
return new Response(file_get_contents($imagePath), 200, ['Content-Type' => 'image/jpeg']);
}
Dynamic Filter Application Use Twig to apply filters dynamically:
{% set filter = 'blur_example' %}
<img src="{{ path('liip_imagine_filter', { filter: filter, path: 'image.jpg' }) }}">
Conditional Filtering Apply filters based on user input or logic:
$filterName = $request->get('filter') === 'pixelate' ? 'pixelate_example' : 'blur_example';
$imagePath = $filterManager->getFilterConfiguration($filterName)->applyFile($originalPath);
Batch Processing Process multiple images with the same filter:
$images = ['image1.jpg', 'image2.jpg'];
foreach ($images as $image) {
$filteredPath = $filterManager->getFilterConfiguration('blur_example')->applyFile($image);
// Save or serve $filteredPath
}
Integration with Uploads Apply filters to uploaded files:
$uploadedFile = $request->file('image');
$filteredPath = $filterManager->getFilterConfiguration('pixelate_example')->applyFile($uploadedFile->getPathname());
blur_example:
cache: imagick_cache # Define cache in liip_imagine.yaml
blur_and_resize:
filters:
thumbnail: { size: [200, 200], mode: outbound }
blur_filter: { start: [0, 0], size: [50, 50] }
return new BinaryFileResponse($filteredPath, 200, [], true);
Filter Area Constraints
start and size must be within image bounds. Overshooting throws errors or applies partial effects.max() to clamp values:
$width = min($image->getWidth(), $start[0] + $size[0]);
Performance with Large Images
quality (0-100) to balance size/speed or offload to a queue (e.g., Symfony Messenger).GD vs. Imagick/Gmagick
phpinfo() for installed extensions and adjust liip_imagine.yaml drivers:
driver: gd # or gmagick/imagick
Configuration Overrides
liip_imagine.yaml are merged. Later definitions override earlier ones.blur_strong, blur_soft) to avoid conflicts.$filteredPath = $filterManager->getFilterConfiguration('blur_example')->applyFile($path);
file_exists($filteredPath); // Should return true
liip_imagine:
filter_sets:
debug:
debug: true # Logs filter execution
Reusable Filter Presets
Create reusable presets in a separate config file (e.g., config/liip_imagine_filters.yaml) and import them:
imports:
- { resource: liip_imagine_filters.yaml }
Custom Filter Parameters
Extend the bundle to add parameters (e.g., blur_intensity):
blur_custom:
filters:
blur_filter:
start: [0, 0]
size: [100, 100]
intensity: 0.7 # Hypothetical extension
Requires modifying the bundle’s service or creating a custom filter class.
Testing
Mock the FilterConfiguration in PHPUnit:
$filterConfig = $this->createMock(FilterConfiguration::class);
$filterConfig->method('applyFile')->willReturn('/path/to/filtered.jpg');
Document Filter Sets
Add comments in liip_imagine.yaml to document use cases:
blur_thumbnail:
# Applies blur to thumbnails (max 200px). Use for preview images.
filters:
thumbnail: { size: [200, 200] }
blur_filter: { start: [0, 0], size: [100, 100] }
How can I help you explore Laravel packages today?