The image factory service contao.image.factory
(contao.image.image_factory
before Contao 5) implements the
Contao\CoreBundle\Image\ImageFactoryInterface
and can be used to retrieve a resized version of a single image.
The create($path, $size, $options)
method supports different formats for its parameters. As an alternative to the
instances of Contao\Image\ImageInterface
, Contao\Image\ResizeConfiguration
and Contao\Image\ResizeOptions
you can
use a string
for the path, an array
(see Size Array) or integer
(ID of an image size in the database)
for the size and a string
for options that gets used as the target path.
As a result you get an instance of Contao\Image\ImageInterface
back from which you can retrieve the path, URL and
dimensions of the image. If you don’t specify a target path and the resized version of the image doesn’t already exist
you can get an instance of Contao\Image\DeferredImageInterface
back which holds the same information but the image
file itself doesn’t exist yet.
// src/ExampleService.php
namespace App;
use Contao\CoreBundle\Image\ImageFactoryInterface;
class ExampleService
{
public function __construct(private readonly ImageFactoryInterface $imageFactory)
{
}
// …
}
$image = $this->imageFactory->create(
'/path/to/image.jpg',
[100, 100, ResizeConfiguration::MODE_CROP],
);
Is the same as the following code:
$image = $this->imageFactory->create(
new Image('/path/to/image.jpg', $imagineService),
new ResizeConfiguration()
->setWidth(100)
->setHeight(100)
->setMode(ResizeConfiguration::MODE_CROP),
);
echo $image->getPath();
// /root/assets/images/9/image-6dc4b466.jpg
echo $image->getUrl('/root');
// assets/images/9/image-6dc4b466.jpg
echo $image->getDimensions()->getSize()->getWidth();
// 100
As mentioned previously, you can also define the target path, either via the ResizeOptions
or just as a string for the
third $options
parameter of the create()
method:
$image = $this->imageFactory->create(
'/path/to/source/image.jpg',
[100, 100, ResizeConfiguration::MODE_CROP],
'/path/to/target/image.jpg',
);
$image = $this->imageFactory->create(
'/path/to/image.jpg',
[100, 100, ResizeConfiguration::MODE_CROP],
new ResizeOptions()->setTargetPath('/path/to/target/image.jpg'),
);
The picture factory service contao.image.picture_factory
implements theContao\CoreBundle\Image\PictureFactoryInterface
and can be used to retrieve a responsive image which may consist of multiple image files in different sizes. The
resulting instance of PictureInterface
is meant to be used with <picture>
, srcset
and sizes
.
The create($path, $size)
method supports different formats for its parameters. As an alternative to the instances of
Contao\Image\ImageInterface
and Contao\Image\PictureConfiguration
you can use a string
for the path and an
array
, integer
or string
for the size configuration.
// src/ExampleService.php
namespace App;
use Contao\CoreBundle\Image\PictureFactoryInterface;
class ExampleService
{
public function __construct(private readonly PictureFactoryInterface $imageFactory)
{
}
// …
}
$image = $this->pictureFactory->create(
'/path/to/image.jpg',
[100, 100, ResizeConfiguration::MODE_CROP]
);
Is the same as the following code:
$image = $this->pictureFactory->create(
new Image('/path/to/image.jpg', $imagineService),
new PictureConfiguration()
->setSize(new PictureConfigurationItem()
->setResizeConfig(new ResizeConfiguration()
->setWidth(100)
->setHeight(100)
->setMode(ResizeConfiguration::MODE_CROP)
)
)
);