function x_resize_crop($file, $name) { // первый параметр - путь до картинки, второй - название размеров, у нас это big и small
ini_set('memory_limit', '128M'); // побольше памяти возьмем
$DOCUMENT_ROOT = rtrim( getenv("DOCUMENT_ROOT"), "/\\" ); // серверный путь до корня сайта
$HTTP_HOST = getenv("HTTP_HOST"); // адрес сайта
$HTTP_FILES_PATH = "/images/"; // папка со всеми картинками (от корня сайта)
$FILES_FOLDER = $DOCUMENT_ROOT.$HTTP_FILES_PATH; // полный путь до папки с картинками
switch($name) { // все размеры, можно добавлять сколько угодно
case 'small': $resizeToWidth = 153.75; $resizeToHeight = 155; break; // маленькая
case 'big': $resizeToWidth = 315; $resizeToHeight = 315; break; // большая
}
$file = str_replace("h_", "", $file); // подготовим имя файла
$imgcache = "resized/".$name.'-'.substr($file, strrpos($file, "/") + 1, strlen($file)); //путь до новой картинки в кэш-папке
if (!file_exists($FILES_FOLDER.$imgcache) and $file and file_exists($DOCUMENT_ROOT.$file)) { // если файла в кэш-папке нет
list($width, $height, $itype) = getimagesize($DOCUMENT_ROOT.$file); // присваиваем переменным данные картинки
switch($itype) { // в зависимости от формата создаем новые изображения
case 1: $image = imagecreatefromgif($DOCUMENT_ROOT.$file); break;
case 2: $image = imagecreatefromjpeg($DOCUMENT_ROOT.$file); break;
case 3: $image = imagecreatefrompng($DOCUMENT_ROOT.$file); break;
}
if ($resizeToWidth >= $width) { // если нужная ширина меньше исходной
$resizeToWidth = $width; // оставим её как есть
}
if ($resizeToHeight >= $height) { // если нужная высота меньше исходной
$resizeToHeight = $height; // оставим её как есть
}
/* МАГИЯ С ПРОПОРЦИЯМИ И ЦЕНТРОВКОЙ */
$resizeWidthRatio = $width / $resizeToWidth;
$resizeHeightRatio = $height / $resizeToHeight;
$resizeRatio = min($resizeHeightRatio, $resizeWidthRatio);
$resizeX = ($width / 2) - ($resizeToWidth / 2) * $resizeRatio;
$resizeY = ($height / 2) - ($resizeToHeight / 2) * $resizeRatio;
$image_n = imagecreatetruecolor($resizeToWidth, $resizeToHeight); // создаем новое полноцветное изображение
if ($itype == 3) { // фигня для png
imagealphablending($image, false);
imagesavealpha($image, true);
imagealphablending($image_n, false);
imagesavealpha($image_n, true);
}
imagecopyresampled($image_n, $image, 0, 0, $resizeX, $resizeY, $resizeToWidth, $resizeToHeight, $width - 2 * $resizeX, $height - 2 * $resizeY); // копирование и изменение размера изображения с ресемплированием
if ($itype == 3) {
imagepng($image_n, $FILES_FOLDER.$imgcache); // новое png
} else {
imagejpeg($image_n, $FILES_FOLDER.$imgcache, 90); // или jpg
}
}
return $HTTP_FILES_PATH.$imgcache; // возвращаем путь
}