Закругление углов картинки с помощью GD

Закругление углов картинки с помощью GDВ этой статье я хочу показать как можно с помощью GD сделать скругление углов.
Задача очень часто встречается, но к сожаления в GD нет стандартных функций для этого. Придется написать самим :)
Алгоритм прост: загружаем нужную картинку. И создаем вспомогательную картинку для углов, в которой нарисуем прозрачную окружность.

Окружность впишем во вспомогательную картинку таким образом, чтобы остался только один непрозрачный кусок(угол), который и будем потом накладывать на рабочую картинку.
Теперь сом код, его я оформил в виде функции для удобства:

/**
* Скругление углов картинки
*
* @param $image - картинка
* @param $radius - радиус скругления
* @param $background - цвет фона для скруглений
*
* @return изображение
*/
function makeCornersForImage($image, $radius, $background){
	// загружаем картинку
	$img = imagecreatefromjpeg($image);
	// включаем режим сопряжения цветов
	imagealphablending($img, true);
	// размер исходной картинки
	$width = imagesx($img);
	$height = imagesy($img);
	// создаем изображение для углов
	$corner = imagecreatetruecolor($radius, $radius);
	imagealphablending($corner, false);
	// прозрачный цвет
	$trans = imagecolorallocatealpha($corner, 255, 255, 255, 127);
	// заливаем картинку для углов
	imagefill($corner, 0, 0, $background);
	// рисуем прозрачный эллипс
	imagefilledellipse($corner, $radius, $radius, $radius * 2, $radius * 2, $trans);
	// массив положений. Для расположения по углам
	$positions = array(
		array(0, 0),
		array($width - $radius, 0),
		array($width - $radius, $height - $radius),
		array(0, $height - $radius),
	);
	// накладываем на углы картинки изображение с прозрачными эллипсами
	foreach ($positions as $pos) {
		imagecopyresampled($img, $corner, $pos[0], $pos[1], 0, 0, $radius, $radius, $radius, $radius);
		// поворачиваем картинку с эллипсов каждый раз на 90 градусов
		$corner = imagerotate($corner, -90, $background, false);
	}
	// вернем картинку
	return $img;
}

И пример использования:

// пример использования
$radius = 50;
$imgPath = 'images/test_img.jpg';
$background = 0xffffff;
// закругляем углы
$imgCorner = makeCornersForImage($imgPath, $radius, $background);
// вывод картинки в браузер
header('Content-Type: image/png');
imagepng($imgCorner);
Рассказать друзьям:


Закругление углов картинки с помощью GD: 1 комментарий

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

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

*