LiipImagineEntityAnnotationBundle has been design the make easier the usage of LiipImagineBundle filter with Entity classes.
It's compatible with:
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Open a command console, enter your project directory and execute:
$ composer require leroy/liip-imagine-entity-annotation-bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require leroy/liip-imagine-entity-annotation-bundle
Then, enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
// config/bundles.php
return [
// ...
Leroy\LiipImagineEntityAnnotationBundle\LiipImagineEntityAnnotationBundle::class => ['all' => true],
];
Given the following filter config:
liip_imagine:
# valid drivers options include "gd" or "gmagick" or "imagick"
driver: "gd"
resolvers :
default :
web_path : ~
filter_sets :
cache : ~
# the name of the "filter set"
my_thumb :
# adjust the image quality to 75%
quality : 75
# list of transformations to apply (the "filters")
filters :
# create a thumbnail: set size to 120x90 and use the "outbound" mode
# to crop the image when the size ratio of the input differs
thumbnail : { size : [120, 90], mode : outbound }
# create a 2px black border: center the thumbnail on a black background
# 4px larger to create a 2px border around the final image
background : { size : [124, 94], position : center, color : '#000000' }
If the original image path is directly accessible in a property of your entity:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Leroy\LiipImagineEntityAnnotationBundle\Annotation\LiipImagineFilter;
class ImageEntity
{
public $path = "/my_image.jpg";
// LiipImagine properties
#[LiipImagineFilter(filter: 'my_thumb', path: 'path')]
private string $thumbnail = '';
public function getThumbnail(): string
{
return $this->thumbnail;
}
public function setThumbnail(string $thumbnail): self
{
$this->thumbnail = $thumbnail;
return $this;
}
}
If the original image is stored using VichUploaderBundle
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
use Leroy\LiipImagineEntityAnnotationBundle\Annotation\LiipImagineFilter;
#[ORM\Entity()]
/**
* @Vich\Uploadable
*/
class ImageEntity
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(type: "datetime")]
private \DateTime $updatedAt;
#[ORM\Column(length: 255)]
private ?string $filename = null;
/**
* @Vich\UploadableField(mapping="images", fileNameProperty="filename")
* @var File
*/
private ?File $file;
// LiipImagine properties
#[LiipImagineFilter(filter: 'my_thumb', vichField: 'file')]
public function __construct()
{
$this->updatedAt = new \DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function getFilename(): ?string
{
return $this->filename;
}
public function setFilename(string $filename): self
{
$this->filename = $filename;
return $this;
}
public function getUpdatedAt(): \DateTime
{
return $this->updatedAt;
}
public function setUpdatedAt(\Datetime $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getFile(): ?File
{
return $this->file;
}
public function setFile(File $file = null): self
{
$this->file = $file;
if ($file) {
$this->updatedAt = new \DateTime('now');
}
return $this;
}
public function getThumbnail(): string
{
return $this->thumbnail;
}
public function setThumbnail(string $thumbnail): self
{
$this->thumbnail = $thumbnail;
return $this;
}
}