Мне нужно объединить размытый прямоугольник на другое изображение (белый прямоугольник). Я попробовал imagesavealpha()
, но, к сожалению, фон прямоугольника остается черным, и я хочу его с градиентом от красного до белого.PHP GD: объединить размытый прямоугольник
Вот мой код:
<?php
$width = 200;
$height = 180;
$bw = $bh = 30;
$img1 = imagecreatetruecolor($width, $height);
$img2 = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($img1, 255, 255, 255);
$red = imagecolorallocate($img2, 255, 0, 0);
imagefilledrectangle($img1, 0, 0, 100, 100, $white);
imagefilledrectangle($img2, 5, 5, 25, 25, $red);
imagefilter($img2, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img2, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img2, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img2, IMG_FILTER_GAUSSIAN_BLUR);
imagefilter($img2, IMG_FILTER_GAUSSIAN_BLUR);
imagesavealpha($img2, true);
imagecopymerge($img1, $img2, 20, 20, 0, 0, $bw, $bh, 100);
header('Content-Type: image/png');
imagepng($img1);
imagedestroy($img1);
restulting изображение:
На самом деле мой реальный фон не просто белый, это образец. Но 'MG_FILTER_GAUSSIAN_BLUR', не поддерживающий альфа-значения, отвечает на мой вопрос. Вы знаете альтернативу получить аналогичный или приближающийся результат? – rooofl
Не в GD. Я попробовал [пример для 'imageconvolution'] (http://php.net/manual/en/function.imageconvolution.php#example-3501), но получил точно такой же результат, что и' imagefilter'. [ImageMagick] (http://php.net/manual/en/imagick.gaussianblurimage.php), вероятно, лучший выбор, но он не всегда доступен. – timclutton