У меня есть фотография (изображение), в ней я хочу добавить прямоугольник или квадрат белого цвета и только этот элемент с фильтром размытия, я использую GD, и все в порядке, но я не могу вставить размытие только в элементе, если я помещаю переменную $ img, все изображение имеет эффект размытия.
Я создал переменную $ rectangle, но если я использую ее в функции, она возвращает ошибку:
Warning: imagesx() expects parameter 1 to be resource, boolean given in...
Код:
$img = @imagecreatefrompng('test.png');
imagealphablending($img, true);
$size = 300;
$back = imagecolorallocatealpha($img, 255, 255, 255, 95);
$border = imagecolorallocatealpha($img, 255,255,255, 127);
imagefilledrectangle($img, 0, 1400, $size - 1, $size - 1, $back);
$rectangle = imagerectangle($img, 0, 1400, $size - 1, $size - 1, $border);
blur($rectangle, 3); //this returns the error.
// blur($img, 3); this makes the whole image have the effect not only the item, only the rectangle should have the effect
Это функция размытия:
function blur($item, $blurFactor = 3)
{
// blurFactor has to be an integer
$blurFactor = round($blurFactor);
$originalWidth = imagesx($item);
$originalHeight = imagesy($item);
$smallestWidth = ceil($originalWidth * pow(0.5, $blurFactor));
$smallestHeight = ceil($originalHeight * pow(0.5, $blurFactor));
// for the first run, the previous image is the original input
$prevImage = $item;
$prevWidth = $originalWidth;
$prevHeight = $originalHeight;
// scale way down and gradually scale back up, blurring all the way
for($i = 0; $i < $blurFactor; $i += 1)
{
// determine dimensions of next image
$nextWidth = $smallestWidth * pow(2, $i);
$nextHeight = $smallestHeight * pow(2, $i);
// resize previous image to next size
$nextImage = imagecreatetruecolor($nextWidth, $nextHeight);
imagecopyresized($nextImage, $prevImage, 0, 0, 0, 0,
$nextWidth, $nextHeight, $prevWidth, $prevHeight);
// apply blur filter
imagefilter($nextImage, IMG_FILTER_GAUSSIAN_BLUR);
// now the new image becomes the previous image for the next step
$prevImage = $nextImage;
$prevWidth = $nextWidth;
$prevHeight = $nextHeight;
}
// scale back to original size and blur one more time
imagecopyresized($item, $nextImage,
0, 0, 0, 0, $originalWidth, $originalHeight, $nextWidth, $nextHeight);
imagefilter($item, IMG_FILTER_GAUSSIAN_BLUR);
// clean up
imagedestroy($prevImage);
// return result
return $item;
}
Спасибо