Kartais reikia ne tik sumažinti vaizdą, bet ir keisti jo dydį pašalinant nereikalingus kraštus ir padaryti naują vaizdo dydį. Ši funkcija pakeičia vaizdo dydį, ir jei jo aukštis ar plotis yra per didelis, po kraštai yra pašalinami nuo centro. Palaikomi vaizdų formatai: jpeg, gif, png.
//sumažinti ir apkarpyti vaizdą per centrą function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){ $imgsize = getimagesize($source_file); $width = $imgsize[0]; $height = $imgsize[1]; $mime = $imgsize['mime']; switch($mime){ case 'image/gif': $image_create = "imagecreatefromgif"; $image = "imagegif"; break; case 'image/png': $image_create = "imagecreatefrompng"; $image = "imagepng"; $quality = 7; break; case 'image/jpeg': $image_create = "imagecreatefromjpeg"; $image = "imagejpeg"; $quality = 80; break; default: return false; break; } $dst_img = imagecreatetruecolor($max_width, $max_height); $src_img = $image_create($source_file); $width_new = $height * $max_width / $max_height; $height_new = $width * $max_height / $max_width; //jei naujas plotis yra didesnis nei esamas vaizdo plotis, reiškia aukštis yra per didelis, todėl likusi dalis nukerpiama, ir atvirkščiai if($width_new > $width){ //kirpimo taškas pagal aukštį $h_point = (($height - $height_new) / 2); //vaizdo kopijavimas imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new); }else{ //kirpimo taškas pagal plotį $w_point = (($width - $width_new) / 2); imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height); } $image($dst_img, $dst_dir, $quality); if($dst_img)imagedestroy($dst_img); if($src_img)imagedestroy($src_img); } //Naudojimo pavyzdys resize_crop_image(100, 100, "test.jpg", "test.jpg");