Столкнулся с такой проблемой.... при загрузки картинки на сервер нужно ее уменьшить в размерах.... уменьшать нужно без потери качества... НЕ резать... ---- просто задаем уменьшение пока 1 из сторон не будет = 220 px ... у меня выходит тупой обрез картинки по сторонам, а нам нужно уменьшение... во втором случаем у меня скукожило картинку... ---- прошу помочь....
PHP: <? header("Content-type: image/jpg"); $newside='220'; $im=imagecreatefromjpeg("patch/image.jpg"); $h=ImageSY($im); $w=ImageSX($im); if ($h < $w) $max=$w; else $max=$h; $pers=(($newside/$max)); $new_w=(($w*$pers)); $new_h=(($h*$pers)); $thumb=imagecreatetruecolor($new_w,$new_h); imagecopyresized($thumb,$im,0,0,0,0,$new_w, $new_h, $w, $h); imagejpeg($thumb); imagedestroy($thumb); ?> Как-то так...
PHP: <pre> <?php @set_time_limit(0); @ini_set("display_errors","1"); //ini_set('default_charset','UTF-8'); //ini_set('default_charset','windows-1251'); function resize($img, $thumb_width, $newfilename) { $max_width=$thumb_width; //Check if GD extension is loaded if (!extension_loaded('gd') && !extension_loaded('gd2')) { trigger_error("GD is not loaded", E_USER_WARNING); return false; } //Get Image size info list($width_orig, $height_orig, $image_type) = getimagesize($img); switch ($image_type) { case 1: $im = imagecreatefromgif($img); break; case 2: $im = imagecreatefromjpeg($img); break; case 3: $im = imagecreatefrompng($img); break; default: trigger_error('Unsupported filetype!', E_USER_WARNING); break; } /*** calculate the aspect ratio ***/ $aspect_ratio = (float) $height_orig / $width_orig; /*** calulate the thumbnail width based on the height ***/ $thumb_height = round($thumb_width * $aspect_ratio); while($thumb_height>$max_width) { $thumb_width-=10; $thumb_height = round($thumb_width * $aspect_ratio); } $newImg = imagecreatetruecolor($thumb_width, $thumb_height); /* Check if this image is PNG or GIF, then set if Transparent*/ if(($image_type == 1) OR ($image_type==3)) { imagealphablending($newImg, false); imagesavealpha($newImg,true); $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $thumb_width, $thumb_height, $transparent); } imagecopyresampled($newImg, $im, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig); //Generate the file, and rename it to $newfilename switch ($image_type) { case 1: imagegif($newImg,$newfilename); break; case 2: imagejpeg($newImg,$newfilename); break; case 3: imagepng($newImg,$newfilename); break; default: trigger_error('Failed resize image!', E_USER_WARNING); break; } return $newfilename; } //Пример вызова echo resize("dss.png", 60, "thumb_test4.png") ?> </pre>