В этой статье я хочу показать как можно с помощью 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);