Изменение размера PNG картинки с сохранением прозрачности

Функция для изменение размера PNG картинки с сохранением прозрачности.
Ниже приведен код с подробными комментариями:

/*
* Ресайз картинки PNG с сохранением прозрачности
*
* $source – исходное изображение
* $path – путь для сохранения новой картинки
* $height – новая высота
* $width – новая ширина
* $formatImg - расширение картинки, для сохранения.
*/
function resizePhotoPNG($source, $path, $height, $width, $formatImg = 'png'){
	$rgb = 0xffffff; //цвет заливки фона
	$size = getimagesize($source);//узнаем размеры исходной картинки
	//определяем тип (расширение) картинки
	$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
	$icfunc = "imagecreatefrom" . $format;   //определение функции для расшерения файла
	//если нет такой функции, то прекращаем работу скрипта
	if (!function_exists($icfunc)) return false;
	$x_ratio = $width / $size[0]; //пропорция ширины
	$y_ratio = $height / $size[1]; //пропорция высоты
	$ratio = min($x_ratio, $y_ratio);
	$use_x_ratio = ($x_ratio == $ratio); //соотношения ширины к высоте
	$new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio); //ширина
	$new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio); //высота
	//расхождение с заданными параметрами по ширине
	$new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
	//расхождение с заданными параметрами по высоте
	$new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
	//создаем вспомогательное изображение пропорциональное картинке
	$img = imagecreatetruecolor($width, $height);
	// делаем его прозрачным
	imagealphablending($img, false); 
	imagesavealpha($img, true);
	
	$photo = $icfunc($source); //достаем наш исходник
	imagecopyresampled($img, $photo, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]); //копируем на него картинку с учетом расхождений
	$func = 'image'.$formatImg;
	$func($img, $path); //сохраняем результат
	// Очищаем память после выполнения скрипта
	imagedestroy($img);
	imagedestroy($photo);
	// вернем путь для картинки
	return $path;
}

Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*