Доброго времени суток!
Проблема так и не решена.
Год 2021, версия Битрикс 20.5.468, PHP 7.4.
В ходе тестирования выявилась одна закономерность. Полосы на png с прозрачным фоном не появляются только с параметром BX_RESIZE_IMAGE_EXACT метода CFile::ResizeImageGet(). Решил копать в эту сторону.
Пришлось дописать метод для вычисления новых значений ширины и высоты изображения с учетом максимальных значений, чтобы не использовать параметр BX_RESIZE_IMAGE_PROPORTIONAL
Далее подставляем новые значения при ресайзе изображений:
Полупрозрачные горизонтальные полосы пропали. Правда это не решило проблему с артефактами на границе перехода с прозрачным фоном после сжатия (см. изображение).
Может кто нашел решение этой задачи?
Проблема так и не решена.
Год 2021, версия Битрикс 20.5.468, PHP 7.4.
В ходе тестирования выявилась одна закономерность. Полосы на png с прозрачным фоном не появляются только с параметром BX_RESIZE_IMAGE_EXACT метода CFile::ResizeImageGet(). Решил копать в эту сторону.
Пришлось дописать метод для вычисления новых значений ширины и высоты изображения с учетом максимальных значений, чтобы не использовать параметр BX_RESIZE_IMAGE_PROPORTIONAL
Код |
---|
public function getIMGSize($arFile, $width, $height){ if (empty($arFile) || !$width || !$height) return FALSE; if ($arFile['WIDTH'] >= $arFile['HEIGHT']){ $width = $arFile['WIDTH'] > $width ? $width : $arFile['WIDTH']; $height = $width * ($arFile['HEIGHT'] / $arFile['WIDTH']); }else{ $height = $arFile['HEIGHT'] > $height ? $height : $arFile['HEIGHT']; $width = $height * ($arFile['WIDTH'] / $arFile['HEIGHT']); } return [ 'WIDTH' => $width, 'HEIGHT'=> $height ]; } |
Код |
---|
$arFile = (is_array($arItem["PREVIEW_PICTURE"]) ? $arItem["PREVIEW_PICTURE"] : CFile::GetFileArray($arItem["PREVIEW_PICTURE"])); $arSize = CClass::getIMGSize($arFile, $max_width, $max_height); $arItem["RESIZED"] = CFile::ResizeImageGet( $arFile, [ 'width' => $arSize['WIDTH'], 'height' => $arSize['HEIGHT'] ], BX_RESIZE_IMAGE_EXACT, true ); |
Полупрозрачные горизонтальные полосы пропали. Правда это не решило проблему с артефактами на границе перехода с прозрачным фоном после сжатия (см. изображение).
Может кто нашел решение этой задачи?