Распечатать этот пост

Закругление углов у изображения

Хочу написать метод закругления краев у картинки. В итоге мы должны получить что-то похожее на то что написано в статье Наложение изображений на PHP, но заменим библиотеку GD на Imagick.

Плюс данного метода в том, что не нужно подготавливать 2 разных картинки и потом их «склеивать»/«смешивать», все делается на лету.

Вот код который это реализует с небольшими коментами:

<?php
/* задаем изображение над которым производим манипуляции */
$image = $_SERVER['DOCUMENT_ROOT'].$_GET['argv'];
/* считываем изображение над которым производим манипуляции */
$im = new Imagick( $image );

if (!($iSize = getimagesize($image))) {
	return false;
}

/* если у нас неоднородный фон и исходное изображение
 не поддерживает альфа канал (прозрачность) то конвертируем его в png */
switch ($iSize['mime']) {
                case 'image/jpeg':
                        $im->setImageFormat("png32");
                        break;
                default:
                        return false;
                        break;
        }

/* Делаем превьюшку (в данном примере 220px на пропорционально по высоте),
 если нужен исходный размер - коментируем */
$im->thumbnailImage( 220, null );

/* Задаем радиус скругления в px */
$im->roundCorners( 11, 11 );
/***
* На данном этапе можно было бы и остановится и сразу выводить то что есть,
* а есть у нас картинко с круглыми краями, но нам вдруг захотелось добавить тенюшку,
* по-этому продолжим нашу епопею
***/

/* Клонируем наше изображение */
$shadow = $im->clone();
/* Задаем фоновый цвет, он и будет цветом тенюшки (в примере черный) */
$shadow->setImageBackgroundColor( new ImagickPixel( 'black' ) );
/* Создаем тень (прозрачность, ширина тенюшки, смещение по X, смещение по Y) */
$shadow->shadowImage( 80, 13, 5, 5 );
/* shadowImage создает тень, по-этому мы ложим поверх теньшки
 исходное изображение */
$shadow->compositeImage( $im, Imagick::COMPOSITE_OVER, 0, 0 );
/* Убираем комменты и т.п. из картинки */
$shadow->stripImage();
/* Выводим получившееся изображение на экран 🙂 */
header( "Content-Type: image/png" );
echo $shadow;

/* Если мы остановились на закрулении и тень нам не нужна
то выводим сразу так:

header( "Content-Type: image/png" );
echo $im;
 */
?>

Результат:

Закругление углов у изображения

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (13 голосов, в среднем: 5,00 из 5)
Загрузка...

Оставьте комментарий