Файл: my.net.ru/system/functions/crop_image.php
Строк: 56
<?php
/*
----------------------------------------
Функция уменьшения и обрезки изображений
----------------------------------------
*/
function crop_image($aInitialImageFilePath, $aNewImageFilePath, $aNewImageWidth, $aNewImageHeight) {
if ($aNewImageWidth < 0 || $aNewImageHeight < 0) {
return false;
}
//Массив с поддерживаемыми типами изображений
$lAllowedExtensions = array(1 => "gif", 2 => "jpeg", 3 => "png");
//Получаем размеры и тип изображения в виде числа
list($lInitialImageWidth, $lInitialImageHeight, $lImageExtensionId) = getimagesize($aInitialImageFilePath);
if (!array_key_exists($lImageExtensionId, $lAllowedExtensions)) {
return false;
}
$lImageExtension = $lAllowedExtensions[$lImageExtensionId];
//Получаем название функции, соответствующую типу, для создания изображения
$func = 'imagecreatefrom'.$lImageExtension;
//Создаём дескриптор исходного изображения
$lInitialImageDescriptor = $func($aInitialImageFilePath);
//Определяем отображаемую область
$lCroppedImageWidth = 0;
$lCroppedImageHeight = 0;
$lInitialImageCroppingX = 0;
$lInitialImageCroppingY = 0;
if ($aNewImageWidth / $aNewImageHeight > $lInitialImageWidth / $lInitialImageHeight) {
$lCroppedImageWidth = floor($lInitialImageWidth);
$lCroppedImageHeight = floor($lInitialImageWidth * $aNewImageHeight / $aNewImageWidth);
$lInitialImageCroppingY = floor(($lInitialImageHeight - $lCroppedImageHeight) / 2);
}else{
$lCroppedImageWidth = floor($lInitialImageHeight * $aNewImageWidth / $aNewImageHeight);
$lCroppedImageHeight = floor($lInitialImageHeight);
$lInitialImageCroppingX = floor(($lInitialImageWidth - $lCroppedImageWidth) / 2);
}
//Создаём дескриптор для выходного изображения
$lNewImageDescriptor = imagecreatetruecolor($aNewImageWidth, $aNewImageHeight);
imagecopyresampled($lNewImageDescriptor, $lInitialImageDescriptor, 0, 0, $lInitialImageCroppingX, $lInitialImageCroppingY,
$aNewImageWidth, $aNewImageHeight, $lCroppedImageWidth, $lCroppedImageHeight);
$func = 'image' . $lImageExtension;
//сохраняем полученное изображение в указанную директорию
return $func($lNewImageDescriptor, $aNewImageFilePath);
}