• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/view/video.php
  • Класс: BitrixDiskViewVideo
  • Вызов: Video::calculateSizes
private function calculateSizes($originalSizes, $maxSizes, $minSizes = array())
{
	if(!isset($originalSizes['WIDTH']) || !isset($originalSizes['HEIGHT']))
	{
		throw new ArgumentNullException('originalSizes');
	}
	if(!isset($maxSizes['WIDTH']) || !isset($maxSizes['HEIGHT']))
	{
		throw new ArgumentNullException('maxSizes');
	}
	if(!isset($minSizes['WIDTH']))
	{
		$minSizes['WIDTH'] = 0;
	}
	if(!isset($minSizes['HEIGHT']))
	{
		$minSizes['HEIGHT'] = 0;
	}
	if($originalSizes['WIDTH'] > $minSizes['WIDTH'] && $originalSizes['HEIGHT'] > $minSizes['HEIGHT'] &&
	 $originalSizes['WIDTH'] < $maxSizes['WIDTH'] && $originalSizes['HEIGHT'] < $maxSizes['HEIGHT'])
	{
		$newSizes = array(
			'WIDTH' => $originalSizes['WIDTH'],
			'HEIGHT' => $originalSizes['HEIGHT']
		);
		return $newSizes;
	}
	if($originalSizes['WIDTH'] < $minSizes['WIDTH'] || $originalSizes['HEIGHT'] < $minSizes['HEIGHT'])
	{
		$newSizes = array(
			'WIDTH' => $minSizes['WIDTH'],
			'HEIGHT' => $minSizes['HEIGHT']
		);
		$resultRelativeSize = $newSizes['WIDTH'] / $newSizes['HEIGHT'];
		$videoRelativeSize = $originalSizes['WIDTH'] / $originalSizes['HEIGHT'];
		if($resultRelativeSize > $videoRelativeSize)
		{
			$reduceRatio = $newSizes['WIDTH'] / $originalSizes['WIDTH'];
		}
		else
		{
			$reduceRatio = $newSizes['HEIGHT'] / $originalSizes['HEIGHT'];
		}
	}
	else
	{
		$newSizes = array(
			'WIDTH' => $maxSizes['WIDTH'],
			'HEIGHT' => $maxSizes['HEIGHT']
		);
		$resultRelativeSize = $newSizes['WIDTH'] / $newSizes['HEIGHT'];
		$videoRelativeSize = $originalSizes['WIDTH'] / $originalSizes['HEIGHT'];
		if($resultRelativeSize > $videoRelativeSize)
		{
			$reduceRatio = $newSizes['HEIGHT'] / $originalSizes['HEIGHT'];
		}
		else
		{
			$reduceRatio = $newSizes['WIDTH'] / $originalSizes['WIDTH'];
		}
	}
	$newSizes['WIDTH'] = floor($originalSizes['WIDTH'] * $reduceRatio);
	$newSizes['HEIGHT'] = floor($originalSizes['HEIGHT'] * $reduceRatio);
	return array('WIDTH' => $newSizes['WIDTH'], 'HEIGHT' => $newSizes['HEIGHT']);
}