Закругление углов у изображения
Хочу написать метод закругления краев у картинки. В итоге мы должны получить что-то похожее на то что написано в статье Наложение изображений на 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; */ ?>
Результат: