Превью изображений

Функция, создающая уменьшенную копию изображения по заданным параметрам.

Функцию писал не я, просто скопировал себе как хороший программный код.
 
function prevue_img($src, $height, $width, $mode = 0, $nocache = false, $rgb=0xffffff, $quality = 100)
{
global $HTTP_IMAGES_PATH, $INCLUDE_FOLDER; 
$imageFile = $_SERVER['DOCUMENT_ROOT'].$src;
if(!is_file($imageFile))
{
return false; // Если файла не существует, то возвращаем false
}
$ext = pathinfo($imageFile, PATHINFO_EXTENSION);
$newFileName = md5_file($imageFile)."_".$width."x".$height."x$mode".(!empty($ext) ? ".".$ext : NULL);
$folder = $HTTP_IMAGES_PATH."cache/"; // Создаем директорию для хранения изображений
if(!$dh=opendir($_SERVER['DOCUMENT_ROOT'].$folder))
{
mkdir($_SERVER['DOCUMENT_ROOT'].$folder, 0777);
}
else
{
closedir($dh); // создаем папке, если нет
}
$newFile = $_SERVER['DOCUMENT_ROOT'].$folder.$newFileName;
if(!is_file($newFile) || $nocache) 
{
$size = getimagesize($_SERVER['DOCUMENT_ROOT'].$src);//узнаем размеры картинки (дает нам масив size)
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); //определяем тип файла
$icfunc = "imagecreatefrom" . $format;   //определение функции соответственно типу файла
if (!function_exists($icfunc)) return false;  //если нет такой функции прекращаем работу скрипта
$x_ratio = $width / $size[0]; //пропорция ширины будущего превью
$y_ratio = $height / $size[1]; //пропорция высоты будущего превью
$ratio       = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio); //соотношения ширины к высоте
$new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio); //ширина превью 
$new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio); //высота превью
$new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2); //расхождение с заданными параметрами по ширине
$new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2); //расхождение с заданными параметрами по высоте
$img = imagecreatetruecolor($width,$height); //создаем вспомогательное изображение пропорциональное превью
imagefill($img, 0, 0, $rgb); //заливаем его…
$photo = $icfunc($_SERVER['DOCUMENT_ROOT'].$src); //достаем наш исходник
imagecopyresampled($img, $photo, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]); //копируем на него нашу превью с учетом расхождений
imagejpeg($img, $newFile, $quality);
// Очищаем память после выполнения скрипта
imagedestroy($img);
imagedestroy($photo);
}
return $folder.$newFileName;    
}

Поделиться с сайта feramount.ru
Поделиться
Последние работы
Комментарии

Комментарии отсутствуют