Закругление углов картинки

Рецепт №105. Из книги «128 рецептов php»
Перейти к оглавлению

Стандартных функций, которые выполняют закругление углов, не существует. Поэтому необходимо самим разрабатывать алгоритм для таких случаев. Один из способов реализации закругления углов, приведен в рецепте: создается вспомогательное квадратное изображение с шириной и высотой равной радиусу закругления. После этого, на вспомогательное изображение накладывается прозрачный эллипс, который оставляет видимым только скругленный угол, все остальное перекрывается. Чтобы перекрыть часть изображения прозрачным эллипсом, необходимо выключить режим сопряжения цветов.

Когда получилось создать изображение с видимым скругленным уголком и прозрачным фоном, его необходимо просто нанести на четыре угла изображения, у которого необходимо сделать закругление углов.
Пример:

// исходная картинка
$image = "test.jpg"; 
// радиус углов
$radius = 50;
// цвет, которым будет заполнен угол
$background = 0xffffff;

// загружаем картинку
$img = imagecreatefromjpeg($image);
// размер исходной картинки
$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);
}
	
// заголовок для браузера
header('Content-type: image/png'); 
// выводим картинку в браузере
imagepng($img); 
// чистим память
imagedestroy($img); 
Рассказать друзьям:


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

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

*