Sumažinti ir apkarpyti vaizdą per centrą su PHP

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");
Šis įrašas buvo paskelbtas kategorijoje Programavimas su žyma , , , . Įrašykite į adresyną nuolatinę nuorodą.

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *