php实现图片模糊视频
PHP 实现图片模糊处理
使用 PHP 的 GD 库或 Imagick 扩展可以实现图片模糊效果。以下是两种方法的实现方式:
GD 库方法
function blurImage($sourceImage, $blurFactor = 3) {
$image = imagecreatefromjpeg($sourceImage);
for ($i = 0; $i < $blurFactor; $i++) {
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
}
imagejpeg($image, 'blurred_image.jpg');
imagedestroy($image);
}
blurImage('input.jpg');
Imagick 方法
function blurImageImagick($sourceImage, $blurFactor = 5) {
$imagick = new \Imagick($sourceImage);
$imagick->blurImage($blurFactor, 3);
$imagick->writeImage('blurred_image_imagick.jpg');
$imagick->destroy();
}
blurImageImagick('input.jpg');
PHP 实现视频模糊处理
视频模糊处理需要先提取视频帧,模糊处理后再重新编码。推荐使用 FFmpeg 结合 PHP:

安装 FFmpeg 确保服务器已安装 FFmpeg,可通过命令行测试:
ffmpeg -version
PHP 调用 FFmpeg 模糊视频

function blurVideo($inputVideo, $outputVideo, $blurStrength = 5) {
$command = "ffmpeg -i $inputVideo -vf 'boxblur=$blurStrength' -c:a copy $outputVideo";
shell_exec($command);
}
blurVideo('input.mp4', 'blurred_output.mp4');
逐帧模糊处理(更高精度)
function frameByFrameBlur($inputVideo, $outputVideo, $blurStrength = 2) {
$tempDir = 'frames_temp';
mkdir($tempDir);
// 提取帧
shell_exec("ffmpeg -i $inputVideo $tempDir/frame_%04d.png");
// 模糊处理每帧
$frames = glob("$tempDir/*.png");
foreach ($frames as $frame) {
$imagick = new \Imagick($frame);
$imagick->blurImage($blurStrength, 3);
$imagick->writeImage($frame);
$imagick->destroy();
}
// 重新编码
shell_exec("ffmpeg -framerate 30 -i $tempDir/frame_%04d.png -c:v libx264 $outputVideo");
// 清理临时文件
array_map('unlink', glob("$tempDir/*"));
rmdir($tempDir);
}
注意事项
- GD 库的模糊效果较基础,Imagick 提供更专业的图像处理能力
- 视频处理需要服务器有足够的内存和计算资源
- FFmpeg 参数可根据需求调整,如修改模糊半径(boxblur=luma_radius:chroma_radius)
- 处理高清视频建议使用 GPU 加速(如通过 FFmpeg 的 hwaccel 参数)
性能优化建议
对于长时间视频,可考虑降低处理分辨率:
shell_exec("ffmpeg -i input.mp4 -vf 'scale=iw/4:ih/4, boxblur=10, scale=iw*4:ih*4' -c:a copy output.mp4");
使用多线程加速 FFmpeg:
shell_exec("ffmpeg -i input.mp4 -vf 'boxblur=5' -threads 4 -c:a copy output.mp4");






