Esempio n. 1
0
 /**
  * Вернет размеры картинки исходя из псевдопути, где '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;
         }
     }
 }