/** * Вернет размеры картинки исходя из псевдопути, где 'w' - ширина, 'h' - высота. * Например: * Для картинки /media/catalog/w100-h100-c1x2/image.jpg (оригинальные размеры: ширина - 160, высота - 120) * вернет array( 'w' => '50', 'h' => '100' ). * * @param string $val Путь или псевдопуть к картинке. * @param json $params Параметры. В текущей версии не используется. * @return mixed */ public static function getSize($val, $params = array()) { $size = self::$temp->getSize($val); if (!empty($size)) { return $size; } else { if (self::fileExists($val)) { $result = array(); $urlParams = self::getParams($val); $originalSize = self::$temp->getSize($urlParams['i']); if (empty($originalSize)) { $originalSize = @getimagesize(self::getFullPath($urlParams['i'])); $originalSize = array('w' => (int) $originalSize[0], 'h' => (int) $originalSize[1]); self::$temp->setSize($urlParams['i'], $originalSize); } if (count($urlParams) > 1) { $originalRatio = $originalSize['w'] / $originalSize['h']; $height = $originalSize['h']; $width = $originalSize['w']; $maxWidth = (isset($urlParams['w']) and $urlParams['w'] < $originalSize['w']) ? (int) $urlParams['w'] : $originalSize['w']; $maxHeight = (isset($urlParams['h']) and $urlParams['h'] < $originalSize['h']) ? (int) $urlParams['h'] : $originalSize['h']; $newRatio = (isset($urlParams['c']) and $cropParams = explode('x', $urlParams['c'])) ? $cropParams[0] / $cropParams[1] : $originalRatio; if ($originalRatio < $newRatio) { $height = $originalSize['w'] / $newRatio; $width = $originalSize['w']; } else { $width = $originalSize['h'] * $newRatio; $height = $originalSize['h']; } $xRatio = $maxWidth / $width; $yRatio = $maxHeight / $height; $result = $xRatio * $height < $maxHeight ? array('w' => (int) $maxWidth, 'h' => (int) round($xRatio * $height)) : array('w' => (int) round($yRatio * $width), 'h' => (int) $maxHeight); self::$temp->setSize($val, $result); } else { $result = $originalSize; } return $result; } } }