<?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);
  
}

?>