/** * Prepares and corrects smart coordinates * * @param WideImage_Image $img * @param smart_coordinate $width * @param smart_coordinate $height * @param string $fit * @return array */ protected function prepareDimensions($img, $width, $height, $fit) { list($width, $height) = WideImage_Coordinate::fixForResize($img, $width, $height); if ($width === 0 || $height === 0) { return array('width' => 0, 'height' => 0); } if ($fit == null) { $fit = 'inside'; } $dim = array(); if ($fit == 'fill') { $dim['width'] = $width; $dim['height'] = $height; } elseif ($fit == 'inside' || $fit == 'outside') { $rx = $img->getWidth() / $width; $ry = $img->getHeight() / $height; if ($fit == 'inside') { $ratio = $rx > $ry ? $rx : $ry; } else { $ratio = $rx < $ry ? $rx : $ry; } $dim['width'] = round($img->getWidth() / $ratio); $dim['height'] = round($img->getHeight() / $ratio); } else { throw new WideImage_Operation_InvalidFitMethodException("{$fit} is not a valid resize-fit method."); } return $dim; }