本文实例讲述了PHP实现生成模糊图片的方法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
<?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(); $image_blur ->gaussian_blur( "./1.jpg" ,null,null,3); ?> |
原图效果:
生成模糊图片后的效果:
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/zxlstudio/article/details/54139092