- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/tradingplatform/vk/photoresizer.php
- Класс: BitrixSaleTradingPlatformVkPhotoResizer
- Вызов: PhotoResizer::checkPhoto
static function checkPhoto($photoId, $sizesLimits)
{
$photoParams = CFile::GetFileArray($photoId);
// check bad files
if(!$photoParams)
return false;
$photoSrc = $photoParams["SRC"];
$photoUrl = self::buildPictureUrl($photoParams["SRC"]);
$needResize = self::RESIZE_NO;
$resizeType = BX_RESIZE_IMAGE_PROPORTIONAL; // default not crop
// need 'RESIZE_UP';
if (
$photoParams['HEIGHT'] < $sizesLimits['MIN_HEIGHT'] ||
$photoParams['WIDTH'] < $sizesLimits['MIN_WIDTH']
)
{
$needResize = self::RESIZE_UP;
}
// need 'RESIZE_DOWN';
if (
($photoParams['HEIGHT'] + $photoParams['WIDTH']) > $sizesLimits['MAX_SIZES_SUM'] ||
$photoParams['FILE_SIZE'] > $sizesLimits['MAX_SIZE']
)
{
$needResize = self::RESIZE_DOWN;
}
// for big RATIO - need a crop. If need resize - use $needResize flag, else - always resize down
if (
(isset($sizesLimits['RATIO_V']) && $photoParams['WIDTH'] / $photoParams['HEIGHT'] <= $sizesLimits['RATIO_V']) ||
(isset($sizesLimits['RATIO_H']) && $photoParams['WIDTH'] / $photoParams['HEIGHT'] >= $sizesLimits['RATIO_H'])
)
{
// UP, but we reduce image (need for a get correct sizes)
if ($needResize == self::RESIZE_UP || $needResize == self::RESIZE_NO)
{
$needResize = self::RESIZE_UP_CROP;
}
elseif ($needResize == self::RESIZE_DOWN)
{
$needResize = self::RESIZE_DOWN_CROP;
}
}
// calculate new sizes
if ($needResize)
{
switch ($needResize)
{
case self::RESIZE_UP:
$multiplier = max($sizesLimits['MIN_WIDTH'] / $photoParams['WIDTH'], $sizesLimits['MIN_HEIGHT'] / $photoParams['HEIGHT']);
$newWidth = ceil($photoParams['WIDTH'] * $multiplier);
$newHeight = ceil($photoParams['HEIGHT'] * $multiplier);
break;
case self::RESIZE_DOWN:
$ratio = $sizesLimits['MIN_WIDTH'] / $sizesLimits['MIN_HEIGHT'];
$newHeight = floor($sizesLimits['MAX_SIZES_SUM'] / ($ratio + 1));
$newWidth = floor($ratio * $newHeight);
break;
case self::RESIZE_UP_CROP:
if(($sizesLimits['MIN_WIDTH'] / $photoParams['WIDTH']) < ($sizesLimits['MIN_HEIGHT'] / $photoParams['HEIGHT']))
{
$ratio = $sizesLimits["RATIO_H"];
$newHeight = $sizesLimits['MIN_HEIGHT'];
$newWidth = floor($sizesLimits['MIN_HEIGHT'] * $ratio) - 1; // minus one for preserve overratio.
}
else
{
$ratio = $sizesLimits["RATIO_V"];
$newWidth = $sizesLimits['MIN_WIDTH'];
$newHeight = floor($sizesLimits['MIN_WIDTH'] / $ratio) - 1; // minus one for preserve overratio.
}
$resizeType = BX_RESIZE_IMAGE_EXACT; // resize with crop
break;
case self::RESIZE_DOWN_CROP:
if(($sizesLimits['MIN_WIDTH'] / $photoParams['WIDTH']) < ($sizesLimits['MIN_HEIGHT'] / $photoParams['HEIGHT']))
{
$ratio = $sizesLimits["RATIO_H"];
$newHeight = floor($sizesLimits['MAX_SIZES_SUM'] / ($ratio + 1));
$newWidth = floor($ratio * $newHeight) - 1; // need -1, because sizes must be <= ratio
}
else
{
$ratio = $sizesLimits["RATIO_V"];
$newHeight = floor($sizesLimits['MAX_SIZES_SUM'] / ($ratio + 1));
$newWidth = floor($ratio * $newHeight--); // need -1, because sizes must be <= ratio
}
$resizeType = BX_RESIZE_IMAGE_EXACT; // resize with crop
break;
default:
return false;
}
$resizeFilters = false;
if ($needResize == self::RESIZE_UP || $needResize == self::RESIZE_UP_CROP)
{
// set empty array for UP resizing - PNG may be failed by timeout
$resizeFilters = [];
}
$resizedPhoto = self::ResizeImageGet(
$photoId,
array('width' => $newWidth, 'height' => $newHeight),
$resizeType,
true,
$resizeFilters
);
// need save new photo
$photoId = CFile::SaveFile(
CFile::MakeFileArray($resizedPhoto['SRC']),
"resize_cache/vk_export_resize_img"
);
$resizedFile = CFile::GetFileArray($photoId);
$photoUrl = self::buildPictureUrl($resizedFile['SRC']);
$photoSrc = $resizedFile['SRC'];
}
return array(
'RESIZE' => $needResize,
'SRC' => $photoSrc,
'URL' => $photoUrl,
'ID' => $photoId,
);
}