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

