$w || $h_new > $h) { // $w_new = $w; // $h_new = $h; } // способ копирования: 1 - гладкий, 0 - без сглаживания: $res = (isset($_REQUEST['res'])) ? (int)$_REQUEST['res'] : 1; // параметр, отвечающий за область обрезки // c - center | r - right | m - middle | b - bottom // лево и верх установленны по умолчанию $clip = (isset($_REQUEST['clip'])) ? strtolower($_REQUEST['clip']) : "nn"; // наложение на фон с заливкой: $fill = (isset($_REQUEST['fill'])) ? $_REQUEST['fill'] : -1; // исходные параметры: $sx = 0; // X $sy = 0; // Y $sw = $w; // W $sh = $h; // H if($w_is_set && $h_is_set && $clip == "nn" && $fill == -1) { // если установлены обе границы (ширина и высота), то делаем // самое простое - подгоняем под нужные границы: if($w > $h) $h_new = floor($h * $w_new / $w); else $w_new = floor($w * $h_new / $h); } elseif($w_is_set && $h_is_set && $clip != "nn") { // обрезка изображения (максимальный кусок): $k1 = $h_new / $w_new; $k2 = $h / $w; if($k1 <= $k2) $sh = floor($w * $k1); elseif($k1 > $k2) $sw = floor($h / $k1); if(strpos($clip, "c") !== false) $sx = floor(($w - $sw) / 2); if(strpos($clip, "r") !== false) $sx = $w - $sw;; if(strpos($clip, "m") !== false) $sy = floor(($h - $sh) / 2); if(strpos($clip, "b") !== false) $sy = $h - $sh; } elseif($w_is_set && $h_is_set && $fill != -1) { // filling... } elseif($w_is_set || $h_is_set) { // подгон по одному из параметров: if($h_is_set) $w_new = floor($w * $h_new / $h); elseif($w_is_set) $h_new = floor($h * $w_new / $w); } // производим действия по полученным параметра: $dst = imagecreatetruecolor($w_new, $h_new); imagepalettecopy($dst, $src); if($res == 0) imagecopyresized($dst, $src, 0, 0, $sx, $sy, $w_new + 1, $h_new + 1, $sw, $sh); else imagecopyresampled($dst, $src, 0, 0, $sx, $sy, $w_new + 1, $h_new + 1, $sw, $sh); imagedestroy($src); // выводить иконку для зума (слева внизу): $zoom = (isset($_REQUEST['zoom'])) ? true : false; if($zoom) { $off_x = 5; $off_y = 5; $ico_w = 10; $ico_h = 9; $ico = imagecreatefrompng('images/zoom_img.png'); imagealphablending($ico, true); imagecopy($dst, $ico, $off_x, $h_new - $ico_h - $off_y, 0, 0, $ico_w, $ico_h); imagedestroy($ico); } // выводить иконку для новинок (справа внизу): $new = (isset($_REQUEST['new'])) ? true : false; if($new) { $off_x = 0; $off_y = 0; $ico_w = 57; $ico_h = 57; $ico = imagecreatefrompng('images/new.png'); imagealphablending($ico, true); imagecopy($dst, $ico, $w_new - $ico_w - $off_x, $h_new - $ico_h - $off_y, 0, 0, $ico_w, $ico_h); imagedestroy($ico); } // вставляем фон (если была такая опция): if($w_is_set && $h_is_set && $fill != -1) { $src = $dst; $w_new2 = ($w_is_set) ? $_REQUEST['w'] : $w_new; $h_new2 = ($h_is_set) ? $_REQUEST['h'] : $h_new; $dst = imagecreatetruecolor($w_new2, $h_new2); imagepalettecopy($dst, $src); imagecopyresampled($dst, $src, round(($w_new2 - $sw) / 2), round(($h_new2 - $sh) / 2), $sx, $sy, $sw + 1, $sh + 1, $sw, $sh); imagedestroy($src); } // включаем режим interlace: imageinterlace($dst); $cache_out = "$cache_dir/$crc.$ext"; // выводим в буфер (а зависимости от типа): switch($ext) { case "gif": if(function_exists("imagegif")) { imagegif($dst, $output); imagegif($dst, $cache_out); } break; case "jpeg": if(function_exists("imagejpeg")) { imagejpeg($dst, $output, $q); imagejpeg($dst, $cache_out, $q); } break; case "png": if(function_exists("imagepng")) { imagepng($dst, $output); imagepng($dst, $cache_out); } break; case "wbmp": if(function_exists("imagewbmp")) { imagewbmp($dst, $output); imagewbmp($dst, $cache_out); } break; default: { imagejpeg($dst, $output, $q); imagejpeg($dst, $cache_out, $q); } break; } imagedestroy($dst); } // всё :) exit; ?>