В этой статье я хочу показать как можно с помощью 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);
Первый угол, левый верхний, все хорошо, а дальше выходит кака, с работой изображений не дружу) помогите разобраться пожалуйста, Вот что функция делает http://rghost.ru/private/7cRPyl8SW/c9ad4778dd60a37e7d05d4214024c06b/image.png