高斯模糊(Gaussian Blur)是一种图像处理技术,通过应用高斯函数来降低图像的噪声和细节,使图像看起来更加平滑。高斯模糊的核心在于使用一个高斯函数来计算每个像素的新值,这个新值是基于其周围像素的加权平均。
在PHP中实现高斯模糊,可以使用GD库或Imagick扩展。以下是使用GD库实现高斯模糊的示例代码:
<?php
function gaussianBlur($image, $radius = 5) {
$width = imagesx($image);
$height = imagesy($image);
$newImage = imagecreatetruecolor($width, $height);
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $width, $height, $width, $height);
$sigma = $radius / 3;
$size = 2 * $radius + 1;
$kernel = array_fill(0, $size, array_fill(0, $size, 0));
$sum = 0;
for ($x = -$radius; $x <= $radius; $x++) {
for ($y = -$radius; $y <= $radius; $y++) {
$kernel[$x + $radius][$y + $radius] = exp(-(($x * $x + $y * $y) / (2 * $sigma * $sigma))) / (2 * M_PI * $sigma * $sigma);
$sum += $kernel[$x + $radius][$y + $radius];
}
}
for ($i = 0; $i < $size; $i++) {
for ($j = 0; $j < $size; $j++) {
$kernel[$i][$j] /= $sum;
}
}
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = array_fill(0, 3, 0);
$weight = 0;
for ($i = -$radius; $i <= $radius; $i++) {
for ($j = -$radius; $j <= $radius; $j++) {
if ($x + $i >= 0 && $x + $i < $width && $y + $j >= 0 && $y + $j < $height) {
$rgb[0] += imagescolorat($image, $x + $i, $y + $j) >> 16 & 0xFF * $kernel[$i + $radius][$j + $radius];
$rgb[1] += imagescolorat($image, $x + $i, $y + $j) >> 8 & 0xFF * $kernel[$i + $radius][$j + $radius];
$rgb[2] += imagescolorat($image, $x + $i, $y + $j) & 0xFF * $kernel[$i + $radius][$j + $radius];
$weight += $kernel[$i + $radius][$j + $radius];
}
}
}
$rgb[0] = intval($rgb[0] / $weight);
$rgb[1] = intval($rgb[1] / $weight);
$rgb[2] = intval($rgb[2] / $weight);
imagesetpixel($newImage, $x, $y, imagecolorallocate($newImage, $rgb[0], $rgb[1], $rgb[2]));
}
}
imagedestroy($image);
return $newImage;
}
// 示例用法
$image = imagecreatefromjpeg('input.jpg');
$blurredImage = gaussianBlur($image, 10);
imagejpeg($blurredImage, 'output.jpg');
imagedestroy($blurredImage);
?>
通过以上方法,可以在PHP中实现高斯模糊效果,并解决常见的技术问题。
领取专属 10元无门槛券
手把手带您无忧上云