• Модуль: 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,
	);
}