diff --git a/bundles/CoreBundle/DependencyInjection/Configuration.php b/bundles/CoreBundle/DependencyInjection/Configuration.php index 7b53220c046..d58f6434a66 100644 --- a/bundles/CoreBundle/DependencyInjection/Configuration.php +++ b/bundles/CoreBundle/DependencyInjection/Configuration.php @@ -563,6 +563,10 @@ private function addAssetNode(ArrayNodeDefinition $rootNode) ->end() ->defaultTrue() ->end() + ->integerNode('max_srcset_dpi_factor') + ->info('Maximum generated srcset DPI factor for web images.') + ->defaultValue(2) + ->end() ->arrayNode('image_optimizers') ->addDefaultsIfNotSet() ->canBeDisabled() diff --git a/models/Asset/Image/Thumbnail.php b/models/Asset/Image/Thumbnail.php index 039d4e6811b..516b032f9e9 100644 --- a/models/Asset/Image/Thumbnail.php +++ b/models/Asset/Image/Thumbnail.php @@ -471,7 +471,8 @@ private function createConfig($selector) private function getSrcset(Config $thumbConfig, Image $image, array $options, ?string $mediaQuery = null): string { $srcSetValues = []; - foreach ([1, 2] as $highRes) { + $maxDpiFactor = $thumbConfig::getMaxDpiFactor(); + for ($highRes=1; $highRes <= $maxDpiFactor; $highRes++) { $thumbConfigRes = clone $thumbConfig; if ($mediaQuery) { $thumbConfigRes->selectMedia($mediaQuery); diff --git a/models/Asset/Image/Thumbnail/Config.php b/models/Asset/Image/Thumbnail/Config.php index c8689873a73..30daeeb2e2a 100644 --- a/models/Asset/Image/Thumbnail/Config.php +++ b/models/Asset/Image/Thumbnail/Config.php @@ -973,4 +973,14 @@ public function generateAutoName(): void $this->setName($this->getName() . '_auto_' . md5($serialized)); } + + /** + * @internal + * + * @return integer + */ + public static function getMaxDpiFactor(): int + { + return \Pimcore::getContainer()->getParameter('pimcore.config')['assets']['image']['thumbnails']['max_srcset_dpi_factor']; + } }