Функция для изменение размера 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; }