Для формирования картинок нужного размера, под нужные мне размеры экранов, я использую на сайте два вот таких куска кода.
Раз:
<?if(!empty($arItem["PREVIEW_PICTURE"])){
$file_w400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w800 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>800, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w900 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>900, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1000 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1000, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1200 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1200, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1500 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1500, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w1800 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1800, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w2200 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2200, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w2100 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2100, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w2400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w2600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
$file_w3000 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>3000, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);
?>
Два:
<picture>
<source srcset="
<?=$file_w600["src"]?> 1x,
<?=$file_w900["src"]?> 1.5x,
<?=$file_w1200["src"]?> 2x,
<?=$file_w1500["src"]?> 2.5x,
<?=$file_w1800["src"]?> 3x,
<?=$file_w2100["src"]?> 3.5x,
<?=$file_w2400["src"]?> 4x"
media="(max-width: 767px)
">
<img src="" srcset="">
</picture>
Выглядит не оптимально и очень не удобно.
Можно как-то иначе описать первый кусок, функцией?
А во втором куске, передавать этой функции нужные мне аргументы, например:
<picture>
<source srcset="
<?=makePreview (arItem["PREVIEW_PICTURE"], 600, 10000,)?> 1x,
<?=makePreview (arItem["PREVIEW_PICTURE"], 800, 10000,)?> 1.5x,
...
Второй кусок у меня в этом случае меньше не будет, тут понятно. Но зато не будет заморочек с первым.