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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
<?php/*已知问题:1.在图片缩放功能中,使用imagecreatetruecolor函数创建画布,并使用透明处理算法,但PNG格式的图片无法透明。用imagecreate函数创建画布可以解决这个问题,但是缩放出来的图片色数太少了***type值:* (1):代表使用图片缩放功能,此时,$value1代表缩放后图片的宽度,$value2代表缩放后图片的高度* (2):代表使用图片裁剪功能,此时,$value1代表裁剪开始点的坐标,例:从原点开始即是“0,0”前面是x轴后面是y轴,中间用,分隔,$value2代表裁剪的宽度和高度,同样也是“20,20”的形式使用* (3):代表使用加图片水印功能,此时,$value1代表水印图片的文件名,$value2代表水印在图片中的位置,有10值个可以选,1代表左上,2代表左中,3代表左右,4代表中左,5代表中中,6代表中右,7代表下做,8代表下中,9代表下右,0代表随机位置**/class image{private $imgtype;//图片的格式private $image; //图片资源private $width;//图片宽度private $height;//图片高度private $value1;//根据所传type值的不同,$value1分别代表不同的值private $value2;//根据所传type值的不同,$value2分别代表不同的值private $endaddress;//输出后的地址+文件名$this->types=$types;$this->image=$this->imagesources($imageaddress);$this->width=$this->imagesizex();$this->height=$this->imagesizey();$this->value1=$value1;$this->value2=$value2;$this->endaddress=$endaddress;}function outimage(){ //根据传入type值的不同,输出不同的功能switch($this->types){case 1:$this->scaling();break;case 2:$this->clipping();break;case 3:$this->imagewater();break;default:return false;}}private function imagewater(){ //http://www.hzhuti.com 加图片水印功能//用函数获取水印文件的长和宽$imagearrs=$this->getimagearr($this->value1);//调用函数计算出水印加载的位置$positionarr=$this->position($this->value2, $imagearrs[0], $imagearrs[1]);//加水印imagecopy($this->image, $this->imagesources($this->value1), $positionarr[0], $positionarr[1], 0, 0, $imagearrs[0], $imagearrs[1]);//调用输出方法保存$this->output($this->image);}private function clipping(){ //图片裁剪功能//将传进来的值分别赋给变量list($dst_w, $dst_h)=explode(",", $this->value2);if($this->width < $src_x+$dst_w || $this->height < $src_y+$dst_h){ //这个判断就是限制不能截取到图片外面去return false;}//创建新的画布资源$newimg=imagecreatetruecolor($dst_w, $dst_h);//进行裁剪imagecopyresampled($newimg, $this->image, 0, 0, $src_x, $src_y, $dst_w, $dst_h, $dst_w, $dst_h);//调用输出方法保存$this->output($newimg);}private function scaling(){ //图片缩放功能//获取等比缩放的宽和高$this-> proimagesize();//根据参数进行缩放,并调用输出函数保存处理后的文件$this->output($this->imagescaling());}private function imagesources($imgad){ //获取图片类型并打开图像资源$imagearray=$this->getimagearr($imgad);switch($imagearray[2]){case 1://gif$this->imgtype=1;$img=imagecreatefromgif($imgad);break;case 2://jpeg$this->imgtype=2;$img=imagecreatefromjpeg($imgad);break;case 3://png$this->imgtype=3;$img=imagecreatefrompng($imgad);break;default:return false;}return $img;}private function imagesizex(){ //获得图片宽度return imagesx($this->image);}private function imagesizey(){ //获取图片高度return imagesy($this->image);}private function proimagesize(){ //计算等比缩放的图片的宽和高if($this->value1 && ($this->width < $this->height)) { //等比缩放算法$this->value1=round(($this->value2/ $this->height)*$this->width);}else{$this->value2=round(($this->value1/ $this->width) * $this->height);}}private function imagescaling(){//图像缩放功能,返回处理后的图像资源$newimg=imagecreatetruecolor($this->value1, $this->value2);$tran=imagecolortransparent($this->image);//处理透明算法if($tran >= 0 && $tran < imagecolorstotal($this->image)){$tranarr=imagecolorsforindex($this->image, $tran);$newcolor=imagecolorallocate($newimg, $tranarr['red'], $tranarr['green'], $tranarr['blue']);imagefill($newimg, 0, 0, $newcolor);imagecolortransparent($newimg, $newcolor);}imagecopyresampled($newimg, $this->image, 0, 0, 0, 0, $this->value1, $this->value2, $this->width, $this->height);return $newimg;}private function output($image){//输出图像switch($this->imgtype){case 1:imagegif($image, $this->endaddress);break;case 2:imagejpeg($image, $this->endaddress);break;case 3:imagepng($image, $this->endaddress);break;default:return false;}}private function getimagearr($imagesou){//返回图像属性数组方法return getimagesize($imagesou);}private function position($num, $width, $height){//根据传入的数字返回一个位置的坐标,$width和$height分别代表插入图像的宽和高switch($num){case 1:$positionarr[0]=0;$positionarr[1]=0;break;case 2:$positionarr[0]=($this->width-$width)/2;$positionarr[1]=0;break;case 3:$positionarr[0]=$this->width-$width;$positionarr[1]=0;break;case 4:$positionarr[0]=0;$positionarr[1]=($this->height-$height)/2;break;case 5:$positionarr[0]=($this->width-$width)/2;$positionarr[1]=($this->height-$height)/2;break;case 6:$positionarr[0]=$this->width-$width;$positionarr[1]=($this->height-$height)/2;break;case 7:$positionarr[0]=0;$positionarr[1]=$this->height-$height;break;case 8:$positionarr[0]=($this->width-$width)/2;$positionarr[1]=$this->height-$height;break;case 9:$positionarr[0]=$this->width-$width;$positionarr[1]=$this->height-$height;break;case 0:$positionarr[0]=rand(0, $this->width-$width);$positionarr[1]=rand(0, $this->height-$height);break;}return $positionarr;}function __destruct(){imagedestroy($this->image);}}?> |
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END

















请登录后发表评论
注册
社交帐号登录