/** * Вырезает максимально возможный прямоугольный в нужной пропорции * * @param LiveImage $oImage Объект изображения * @param int $iW Ширина для определения пропорции * @param int $iH Высота для определения пропорции * @param bool $bCenter Вырезать из центра * @return LiveImage */ public function CropProportion(LiveImage $oImage, $iW, $iH, $bCenter = true) { if (!$oImage || $oImage->get_last_error()) { return false; } $iWidth = $oImage->get_image_params('width'); $iHeight = $oImage->get_image_params('height'); /** * Если высота и ширина уже в нужных пропорциях, то возвращаем изначальный вариант */ $iProp = round($iW / $iH, 2); if (round($iWidth / $iHeight, 2) == $iProp) { return $oImage; } /** * Вырезаем прямоугольник из центра */ if (round($iWidth / $iHeight, 2) <= $iProp) { $iNewWidth = $iWidth; $iNewHeight = round($iNewWidth / $iProp); } else { $iNewHeight = $iHeight; $iNewWidth = $iNewHeight * $iProp; } if ($bCenter) { $oImage->crop($iNewWidth, $iNewHeight, ($iWidth - $iNewWidth) / 2, ($iHeight - $iNewHeight) / 2); } else { $oImage->crop($iNewWidth, $iNewHeight, 0, 0); } /** * Возвращаем объект изображения */ return $oImage; }
/** * Вырезает максимально возможный квадрат * * @param LiveImage $oImage * @return LiveImage */ public function CropSquare(LiveImage $oImage) { if (!$oImage || $oImage->get_last_error()) { return false; } $iWidth = $oImage->get_image_params('width'); $iHeight = $oImage->get_image_params('height'); /** * Если высота и ширина совпадают, то возвращаем изначальный вариант */ if ($iWidth == $iHeight) { return $oImage; } /** * Вырезаем квадрат из центра */ $iNewSize = min($iWidth, $iHeight); $oImage->crop($iNewSize, $iNewSize, ($iWidth - $iNewSize) / 2, ($iHeight - $iNewSize) / 2); /** * Возвращаем объект изображения */ return $oImage; }