contao / image
Contao image library
Fund package maintenance!
to.contao.org/donate
Installs: 1 307 991
Dependents: 7
Suggesters: 0
Security: 0
Stars: 12
Watchers: 10
Forks: 5
Open Issues: 6
Requires
- php: ^7.2 || ^8.0
- ext-dom: *
- ext-gd: *
- ext-hash: *
- ext-json: *
- ext-zlib: *
- imagine/imagine: ^1.3
- symfony/deprecation-contracts: ^2.1 || ^3.0
- symfony/filesystem: ^5.4 || ^6.0 || ^7.0
- symfony/polyfill-php73: ^1.27
- symfony/polyfill-php80: ^1.27
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.4
- contao/imagine-svg: ^1.0
- contao/test-case: ^4.5
- phpunit/phpunit: ^8.5 || ^9.5
- symfony/phpunit-bridge: ^5.4 || ^6.0 || ^7.0
- symfony/polyfill-php81: ^1.27
Suggests
- ext-exif: To support EXIF auto-rotation and preserve copyright metadata
Conflicts
- contao/imagine-svg: <1.0 || >=2.0
README
This library provides methods to resize images based on resize configurations
and generates responsive images to be used with <picture>
and srcset
. It is
used in Contao to handle on-the-fly resizing of images.
Installation
php composer.phar require contao/image
Usage
Simple resize:
$imagine = new \Imagine\Gd\Imagine(); $resizer = new Resizer('/path/to/cache/dir'); $image = new Image('/path/to/image.jpg', $imagine); $config = (new ResizeConfiguration()) ->setWidth(100) ->setHeight(100) ->setMode(ResizeConfiguration::MODE_CROP) ; $options = (new ResizeOptions()) ->setImagineOptions([ 'jpeg_quality' => 95, 'interlace' => \Imagine\Image\ImageInterface::INTERLACE_PLANE, ]) ->setBypassCache(true) ->setTargetPath('/custom/target/path.jpg') ; $resizedImage = $resizer->resize($image, $config, $options); $resizedImage->getPath(); // /custom/target/path.jpg $resizedImage->getUrl('/custom/target'); // path.jpg $resizedImage->getUrl('/custom/target', 'https://example.com/'); // https://example.com/path.jpg
Responsive image:
$imagine = new \Imagine\Gd\Imagine(); $resizer = new Resizer('/path/to/cache/dir'); $pictureGenerator = new PictureGenerator($resizer); $image = new Image('/path/to/image.jpg', $imagine); $config = (new PictureConfiguration()) ->setSize((new PictureConfigurationItem()) ->setResizeConfig((new ResizeConfiguration()) ->setWidth(100) ->setHeight(100) ->setMode(ResizeConfiguration::MODE_CROP) ) ->setDensities('1x, 2x') ->setSizes('100vw') ) ->setSizeItems([ (new PictureConfigurationItem()) ->setResizeConfig((new ResizeConfiguration()) ->setWidth(400) ->setHeight(200) ->setMode(ResizeConfiguration::MODE_CROP) ) ->setDensities('1x, 2x') ->setSizes('100vw') ->setMedia('(min-width: 900px)') ]) ; $options = (new ResizeOptions()); $picture = $pictureGenerator->generate($image, $config, $options); $picture->getImg('/path/to'); /* [ 'src' => 'cache/dir/4/image-de332f09.jpg', 'width' => 100, 'height' => 100, 'srcset' => 'cache/dir/4/image-de332f09.jpg 100w, cache/dir/4/image-9e0829dd.jpg 200w', 'sizes' => '100vw', ] */ $picture->getSources('/path/to', 'https://example.com/'); /* [ [ 'src' => 'https://example.com/cache/dir/c/image-996db4cf.jpg', 'width' => 400, 'height' => 200, 'srcset' => 'https://example.com/cache/dir/c/image-996db4cf.jpg 400w, https://example.com/cache/dir/2/image-457dc5e0.jpg 800w', 'sizes' => '100vw', 'media' => '(min-width: 900px)', ], ] */