PHP code example of timnarr / kirby-imagex
1. Go to this page and download the library: Download timnarr/kirby-imagex library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
timnarr / kirby-imagex example snippets
return [
'timnarr.imagex' => [
'cache' => true,
'compareFormatsWeights' => 'mobile',
'customLazyloading' => false,
'formats' => ['avif', 'webp'],
'addOriginalFormatAsSource' => false,
'noSrcsetInImg' => false,
'relativeUrls' => false,
],
];
// config.php
'thumbs' => [
'srcsets' => [
'my-srcset' => [ // preset for JPEG and PNG
'400w' => ['width' => 400, 'crop' => true, 'quality' => 80],
'800w' => ['width' => 800, 'crop' => true, 'quality' => 80],
'1200w' => ['width' => 1200, 'crop' => true, 'quality' => 80],
],
'my-srcset-webp' => [ // preset for webp
'400w' => ['width' => 400, 'crop' => true, 'quality' => 75, 'format' => 'webp', 'sharpen' => 10],
'800w' => ['width' => 800, 'crop' => true, 'quality' => 75, 'format' => 'webp', 'sharpen' => 10],
'1200w' => ['width' => 1200, 'crop' => true, 'quality' => 75, 'format' => 'webp', 'sharpen' => 10],
],
'my-srcset-avif' => [ // preset for avif
'400w' => ['width' => 400, 'crop' => true, 'quality' => 65, 'format' => 'avif', 'sharpen' => 25],
'800w' => ['width' => 800, 'crop' => true, 'quality' => 65, 'format' => 'avif', 'sharpen' => 25],
'1200w' => ['width' => 1200, 'crop' => true, 'quality' => 65, 'format' => 'avif', 'sharpen' => 25],
],
// other srcset definitions
// Define your options and pass them to the `imagex-picture` snippet
$options = [
'image' => $image->toFile(),
'attributes' => [
'img' => [
'class' => ['my-image'],
'style' => ['background: red;'],
'sizes' => '100vw',
],
],
'ratio' => '16/9',
'srcset' => 'my-srcset',
'loading' => 'lazy',
];
$options = [
'image' => $image->toFile(),
// ... other imagex options
];
$options = [
'image' => $image->toFile(),
'ratio' => '16/9',
'srcset' => 'my-srcset',
// ... all other options work the same
];
$json = snippet('imagex-picture-json', $options, true);
echo $json;
$options = [
'image' => $image->toFile(),
'loading' => $isCritical ? 'eager' : 'lazy',
'srcset' => 'my-srcset',
'ratio' => '1/1',
'attributes' => [
// Simple flat syntax (auto-converted to 'shared')
'picture' => [
'class' => ['my-picture-class'],
'data-attr' => 'my-picture-attribute',
],
// Full syntax with loading-mode-specific attributes
'img' => [
'shared' => [
'class' => [
'my-image-class',
$setThisClassWhenTrue ? 'optional-class' : null
],
'alt' => $image->alt(),
'style' => ['background-color: red;', 'object-fit: cover;', 'object-position: ' . $image->focus() . ';'],
'data-attr' => 'my-img-attribute',
'sizes' => '760px',
],
'eager' => [
// extend `shared` attributes in eager loading mode
],
'lazy' => [
// extend `shared` attributes in lazy loading mode
'class' => ['js-lazyload'],
],
],
],
// Art direction with media query in each item
'artDirection' => [
[
'media' => '(min-width: 1200px)',
'ratio' => '21/9',
],
[
'media' => '(min-width: 820px)',
'image' => $artDirectedImage,
],
[
'media' => '(prefers-color-scheme: dark)',
'ratio' => '16/9',
'image' => $darkModeImage,
],
[
'media' => '(orientation: landscape)',
'ratio' => '21/9',
'attributes' => ['shared' => ['data-landscape' => 'true']],
],
],
];
// Pass your options to the `imagex-picture` snippet
snippet('imagex-picture', $options)
// Provide a larger image for crawlers while keeping optimized srcset for browsers
$options = [
'image' => $image->toFile(),
'attributes' => [
'img' => [
'src' => $image->thumb(['width' => 1200, 'quality' => 85])->url(), // large image for crawlers
'alt' => $image->alt(),
],
],
'srcset' => 'my-srcset',
];
snippet('imagex-picture', $options);
$ratio = '16/9';
$options = [
'image' => $image->toFile(),
'ratio' => $ratio,
'srcset' => 'my-srcset',
'attributes' => [
'img' => [
'shared' => [
'src' => $image->toFile()->thumbRatio($ratio, ['width' => 1200])->url(),
],
],
],
];