Для размытия изображение с помощью средств php можно воспользоваться библиотекой Imagick. Для этого на изображение нужно наложить фильтр. В Imagick есть две подходящих функции для этого:
- blurImage;
- adaptiveblurimage.
Я проводил испытания, по которым blurImage показала производительность в 20-50 раз выше чем adaptiveblurimage на картинках размером 1000px на 1000px. На картинках до 200px разницы в проиводительности не почувствовал. Также не заметил особых изменений в качестве картинки при использовании обех функций. Поэтому остановился на blurImage. Код, размывающий картинку, и сохраняющий её по новому пути:
$magic = new Imagick(); $magic->readimage('image.png'); $magic->blurImage(0, 9); $magic->writeimage('path_to_save.png');
Какие параметры передавать в blurImage для размытия изображения?
bool Imagick::blurImage ( float $radius , float $sigma [, int $channel ] )
Список параметров blurImage:
- $radius - радиус размытия;
- $sigma - cтандартное отклонение;
- $channel - константа Channeltype. Если не указано, то будут размыты все каналы. Необязательный третий параметр служит для размытия определенного канала.
Imagick советует использовать певый параметр ($radius), как ноль:
The ideal solution is to simply set radius to 0. In that case the operator will try to automatically determine the best radius for the sigma given.
Возвращаемое значение
Возвращает TRUE в случае успеха. Выбрасывает исключение ImagickException в случае ошибки.
Для испытаний функции blurImage я выбрал одну из самых красивых аватарок на сайте. Надеюсь, Роза не обидется:
Следующий пример, взятый из официальной доки, сразу выведет размытую картинку в браузер:
<?php header('Content-type: image/jpeg'); $image = new Imagick('test.jpg'); $image->blurImage(5,3); echo $image; ?>
Комментарии 6
blurImage(0, 20);