本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下:
实例1:
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
|
<?php /** * desription 压缩图片 * @param sting $imgsrc 图片路径 * @param string $imgdst 压缩后保存路径 */ function image_png_size_add( $imgsrc , $imgdst ){ list( $width , $height , $type )= getimagesize ( $imgsrc ); $new_width = ( $width >600?600: $width )*0.9; $new_height =( $height >600?600: $height )*0.9; switch ( $type ){ case 1: $giftype =check_gifcartoon( $imgsrc ); if ( $giftype ){ header( 'Content-Type:image/gif' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefromgif( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); } break ; case 2: header( 'Content-Type:image/jpeg' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefromjpeg( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); break ; case 3: header( 'Content-Type:image/png' ); $image_wp =imagecreatetruecolor( $new_width , $new_height ); $image = imagecreatefrompng( $imgsrc ); imagecopyresampled( $image_wp , $image , 0, 0, 0, 0, $new_width , $new_height , $width , $height ); imagejpeg( $image_wp , $imgdst ,75); imagedestroy( $image_wp ); break ; } } /** * desription 判断是否gif动画 * @param sting $image_file图片路径 * @return boolean t 是 f 否 */ function check_gifcartoon( $image_file ){ $fp = fopen ( $image_file , 'rb' ); $image_head = fread ( $fp ,1024); fclose( $fp ); return preg_match( "/" . chr (0x21). chr (0xff). chr (0x0b). 'NETSCAPE2.0' . "/" , $image_head )?false:true; } ?> |
实例2:
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
|
<?php /* ---------------------------------------------------------------------- 函数:调整图片尺寸或生成缩略图 返回:True/False 参数: $Image 需要调整的图片(含路径) $Dw =450 调整时最大宽度;缩略图时的绝对宽度 $Dh =450 调整时最大高度;缩略图时的绝对高度 $Type =1 1,调整尺寸; 2,生成缩略图 $path = 'img/' ; //路径 $phtypes = array ( 'img/gif' , 'img/jpg' , 'img/jpeg' , 'img/bmp' , 'img/pjpeg' , 'img/x-png' ); Function Img( $Image , $Dw =450, $Dh =450, $Type =1){ IF(! File_Exists ( $Image )){ Return False; } //如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值 IF( $Type !=1){ Copy ( $Image , Str_Replace ( "." , "_x." , $Image )); $Image = Str_Replace ( "." , "_x." , $Image ); } //取得文件的类型,根据不同的类型建立不同的对象 $ImgInfo = GetImageSize ( $Image ); Switch( $ImgInfo [2]){ Case 1: $Img = @ImageCreateFromGIF( $Image ); Break; Case 2: $Img = @ImageCreateFromJPEG( $Image ); Break; Case 3: $Img = @ImageCreateFromPNG( $Image ); Break; } //如果对象没有创建成功,则说明非图片文件 IF( Empty ( $Img )){ //如果是生成缩略图的时候出错,则需要删掉已经复制的文件 IF( $Type !=1){Unlink( $Image );} Return False; } //如果是执行调整尺寸操作则 IF( $Type ==1){ $w =ImagesX( $Img ); $h =ImagesY( $Img ); $width = $w ; $height = $h ; IF( $width > $Dw ){ $Par = $Dw / $width ; $width = $Dw ; $height = $height * $Par ; IF( $height > $Dh ){ $Par = $Dh / $height ; $height = $Dh ; $width = $width * $Par ; } }ElseIF( $height > $Dh ){ $Par = $Dh / $height ; $height = $Dh ; $width = $width * $Par ; IF( $width > $Dw ){ $Par = $Dw / $width ; $width = $Dw ; $height = $height * $Par ; } }Else{ $width = $width ; $height = $height ; } $nImg = ImageCreateTrueColor( $width , $height ); //新建一个真彩色画布 ImageCopyReSampled( $nImg , $Img ,0,0,0,0, $width , $height , $w , $h ); //重采样拷贝部分图像并调整大小 ImageJpeg ( $nImg , $Image ); //以JPEG格式将图像输出到浏览器或文件 Return True; //如果是执行生成缩略图操作则 }Else{ $w =ImagesX( $Img ); $h =ImagesY( $Img ); $width = $w ; $height = $h ; $nImg = ImageCreateTrueColor( $Dw , $Dh ); IF( $h / $w > $Dh / $Dw ){ //高比较大 $width = $Dw ; $height = $h * $Dw / $w ; $IntNH = $height - $Dh ; ImageCopyReSampled( $nImg , $Img , 0, - $IntNH /1.8, 0, 0, $Dw , $height , $w , $h ); }Else{ //宽比较大 $height = $Dh ; $width = $w * $Dh / $h ; $IntNW = $width - $Dw ; ImageCopyReSampled( $nImg , $Img , - $IntNW /1.8, 0, 0, 0, $width , $Dh , $w , $h ); } ImageJpeg ( $nImg , $Image ); Return True; } } ?> <html><body> <form method= "post" enctype= "multipart/form-data" name= "form1" > <table> <tr><td>上传图片</td></tr> <tr><td><input type= "file" name= "photo" size= "20" /></td></tr> <tr><td><input type= "submit" value= "上传" /></td></tr> </table> 允许上传的文件类型为:<?=implode( ', ' , $phtypes )?></form> <?php if ( $_SERVER [ 'REQUEST_METHOD' ]== 'POST' ){ if (! is_uploaded_file ( $_FILES [ "photo" ][tmp_name])){ echo "图片不存在" ; exit (); } if (! is_dir ( 'img' )){ //路径若不存在则创建 mkdir ( 'img' ); } $upfile = $_FILES [ "photo" ]; $pinfo = pathinfo ( $upfile [ "name" ]); $name = $pinfo [ 'basename' ]; //文件名 $tmp_name = $upfile [ "tmp_name" ]; $file_type = $pinfo [ 'extension' ]; //获得文件类型 $showphpath = $path . $name ; if (in_array( $upfile [ "type" ], $phtypes )){ echo "文件类型不符!" ; exit (); } if (move_uploaded_file( $tmp_name , $path . $name )){ echo "成功!" ; Img( $showphpath ,100,800,2); } echo "<img src=\"" . $showphpath . "\" />" ; } ?> </body> </html> |