Закругление углов картинки с помощью 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
Добавлено: 09 Мая 2018 18:19:34 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...