2013-11-21 4 views

ответ

2

Вы должны применить image convolution (wiki).

Матрица для размытия:

enter image description here

Код PHP:

$gaussian = array(
    array(1.0, 2.0, 1.0), 
    array(2.0, 4.0, 2.0), 
    array(1.0, 2.0, 1.0) 
); 
imageconvolution($YOUR_IMAGE, $gaussian, 16, 0); // apply convolution 

Полный пример:

<?php 
// Informations for blur selection 
$x = 180; 
$y = 20; 
$width = 200; 
$height = 180; 

$img1 = imagecreatefromjpeg('img1.jpg'); // load source 
$img2 = imagecreatetruecolor($width, $height); // create img2 for selection 

imagecopy($img2, $img1, 0, 0, $x, $y, $width, $height); // copy selection to img2 

$gaussian = array(
    array(1.0, 2.0, 1.0), 
    array(2.0, 4.0, 2.0), 
    array(1.0, 2.0, 1.0) 
); 
imageconvolution($img2, $gaussian, 16, 0); // apply convolution to img2 

imagecopymerge($img1, $img2, $x, $y, 0, 0, $width, $height, 100); // merge img2 in img1 

// Show result (img1) 
header('Content-Type: image/jpg'); 
imagejpeg($img1); 

imagedestroy($img1); 
imagedestroy($img2); 

И не забудьте переименовать imagecreatefromjpeg и imagejpeg с нужными функциями, если вы используете PNG или GIF (см php man).

+0

Как я могу это сделать только на одной части изображения, а не весь? – HyperDevil

+0

Вам нужно скопировать раздел своего изображения с помощью 'imagecopy', применить свертки и объединить изображения с помощью' imagecopymerge'. –

+0

Я добавил полный пример –

Смежные вопросы