美文网首页
PHP 图片高斯模糊【转】

PHP 图片高斯模糊【转】

作者: zlchen | 来源:发表于2020-08-24 00:01 被阅读0次

class image_blur{

/**

  * 图片高斯模糊(适用于png/jpg/gif格式)

  * @param $srcImg 原图片

  * @param $savepath 保存路径

  * @param $savename 保存名字

  * @param $positon 模糊程度

  *

  *基于Martijn Frazer代码的扩充, 感谢 Martijn Frazer

  */

 public function gaussian_blur($srcImg,$savepath=null,$savename=null,$blurFactor=3){

  $gdImageResource=$this->image_create_from_ext($srcImg);

  $srcImgObj=$this->blur($gdImageResource,$blurFactor);

  $temp = pathinfo($srcImg);

  $name = $temp['basename'];

  $path = $temp['dirname'];

  $exte = $temp['extension'];

  $savename = $savename ? $savename : $name;

  $savepath = $savepath ? $savepath : $path;

  $savefile = $savepath .'/'. $savename;

  $srcinfo = @getimagesize($srcImg);

  switch ($srcinfo[2]) {

   case 1: imagegif($srcImgObj, $savefile); break;

   case 2: imagejpeg($srcImgObj, $savefile); break;

   case 3: imagepng($srcImgObj, $savefile); break;

   default: return '保存失败'; //保存失败

  }

  return $savefile;

  imagedestroy($srcImgObj);

 }

 /**

 * Strong Blur

 *

 * @param $gdImageResource 图片资源

 * @param $blurFactor   可选择的模糊程度

 * 可选择的模糊程度 0使用 3默认 超过5时 极其模糊

 * @return GD image 图片资源类型

 * @author Martijn Frazer, idea based on http://stackoverflow.com/a/20264482

 */

 private function blur($gdImageResource, $blurFactor = 3)

 {

  // blurFactor has to be an integer

  $blurFactor = round($blurFactor);

  $originalWidth = imagesx($gdImageResource);

  $originalHeight = imagesy($gdImageResource);

  $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 = $gdImageResource;

  $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($gdImageResource, $nextImage,

  0, 0, 0, 0, $originalWidth, $originalHeight, $nextWidth, $nextHeight);

  imagefilter($gdImageResource, IMG_FILTER_GAUSSIAN_BLUR);

  // clean up

  imagedestroy($prevImage);

  // return result

  return $gdImageResource;

 }

 private function image_create_from_ext($imgfile)

 {

  $info = getimagesize($imgfile);

  $im = null;

  switch ($info[2]) {

  case 1: $im=imagecreatefromgif($imgfile); break;

  case 2: $im=imagecreatefromjpeg($imgfile); break;

  case 3: $im=imagecreatefrompng($imgfile); break;

  }

  return $im;

 }

}

$image_blur = new image_blur();

$image_blur->gaussian_blur("./1.jpg",null,null,3);

?>

原文链接:https://www.php.cn/php-ask-458130.html

相关文章

网友评论

      本文标题:PHP 图片高斯模糊【转】

      本文链接:https://www.haomeiwen.com/subject/kjkgjktx.html