zoukankan      html  css  js  c++  java
  • PHP压缩图片并模糊处理(抄的哟)

    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();
    echo $image_blur->gaussian_blur("./test2.jpg",null,null,3);
  • 相关阅读:
    java关键字之synchronized
    java多线程之线程安全
    java多线程之管道流
    java多线程之多生产者-多消费者
    java多线程之生产者-消费者
    java多线程之wait和notify
    python读取json文件并解析
    java之继承中的静态变量
    shell多线程(3)while循环
    equals与hashcode
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/10837953.html
Copyright © 2011-2022 走看看