PHP实现图片压缩的两则实例(转)
本文介绍了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> |
http://www.jb51.net/article/52380.htm
PHP实现图片压缩的两则实例(转)的更多相关文章
- node图片压缩的两员大将
一.ishrink 全局安装 npm i ishrink -g 1.按url方式压缩 本地图片地址 sk -u C:\Users\admin\Desktop\images\img 网络图片地址 sk ...
- iOS 图片压缩方法
iOS 图片压缩方法 两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGReprese ...
- Nginx网络压缩 CSS压缩 图片压缩 JSON压缩
一.序言 使用Nginx作为web应用服务时,会代理如下常见文件:js.css.JSON.图片等,本文提供基于Nginx内置的压缩技术,提供网络请求响应速度的解决方案. 1.网络压缩原理 网络压缩的原 ...
- 使用HTML5的两个api,前端js完成图片压缩
主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...
- C#实现对图片文件的压缩、裁剪操作实例
本文实例讲述了C#对图片文件的压缩.裁剪操作方法,在C#项目开发中非常有实用价值.分享给大家供大家参考.具体如下: 一般在做项目时,对图片的处理,以前都采用在上传时,限制其大小的方式,这样带来诸多不便 ...
- android图片压缩的3种方法实例
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- 图片压缩CompressUtil解析
CompressUtil 流程图: CompressUtil 类 具体解释 public class CompressUtil { /** * 终于封装的压缩方法 * @param imgPath * ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
随机推荐
- requestAnimationFrame 的实验性实践
记得当 requestAnimationFrame 出现时我立马就石更了,就跟初次玩耍 transition 时一样,欣喜若狂... 然后,然后特么的就懵逼了,这明明就是口挖不通的深井呀(如果是我傻, ...
- php数组函数-array_pad()
array_pad()函数向一个数组插入带有指定值的指定数量的元素. array_pad(array,size,value); array:必需.规定数组 size:必需.指定的长度.正数则填补到右侧 ...
- javaMail发送邮件实例
背景:最近项目里有个实时发送邮件的功能,今天闲下来整理 一下,记录下来方便以后直接使用. 代码: package com.dzf.utils; import java.io.File; import ...
- 文件系统中跳转【TLCL】
pwd - Print name of current working directory cd - Change directory ls - List directory contents Lin ...
- spring boot 基础学习
构建微服务:Spring boot 入门篇 http://www.cnblogs.com/ityouknow/p/5662753.html SpringBoot入门系列:第一篇 Hello World ...
- Codeforces Round #372 (Div. 2) A ,B ,C 水,水,公式
A. Crazy Computer time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- java中finally的使用
以前认为finally没用,但是实际上在try使用中是不可缺少的.
- review33
当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称为“主线程”(main线程),该线程负责执行main方法.那么在main方法执行中再创建的其他线程就称为程序中的其他线程. 如果ma ...
- python中的单引号双引号和三引号
python的单引号和双引号没有本质的区别,而三引号有两种作用:注释和换行 一. 单引号中可以包含双引号,双引号中可以包含单引号 print("好好学习,'天天向上'") 结果: ...
- 去掉标题栏的方法(使用requestWindowFeature(Window.FEATURE_NO_TITLE);为什么失效?不仅失效,可能会挂)
使用requestWindowFeature(Window.FEATURE_NO_TITLE)隐藏标题栏失效的原因,不仅失效,可能会挂.可能是activity继承的是AppCompatActivity ...