本文介绍了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

转载于:https://www.cnblogs.com/xihong2014/p/5336176.html

PHP实现图片压缩的两则实例(转)相关推荐

  1. java 图片压缩100k_Java 实现图片压缩的两种方法

    问题背景. 典型的情景:Nemo社区中,用户上传的图片免不了要在某处给用户做展示. 如用户上传的头像,那么其他用户在浏览该用户信息的时候,就会需要回显头像信息了. 用户上传的原图可能由于清晰度较高而体 ...

  2. android图片压缩的两个开源库

    Luban(鲁班) -- Android图片压缩工具,仿微信朋友圈压缩策略. 项目描述 目前做App开发总绕不开图片这个元素.但是随着手机拍照分辨率的提升,图片的压缩成为一个很重要的问题.单纯对图片进 ...

  3. bitmap.compress(图片压缩的两种方式)(1,质量压缩;2,采样率压缩)

    代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat. ...

  4. iOS小技能:解决图片压缩之后的模糊问题

    文章目录 前言 I 图片压缩的两种方式 II 解决压缩之后图片模糊的问题 2.1 如果是拍照,可以压缩一下分辨率,否则上传很慢 2.2. 质量压缩(0.5) 结合比例压缩(1028) III 针对业务 ...

  5. iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGRepresentation(ima ...

  6. 【机器学习】K-Means(非监督学习)学习及实例使用其将图片压缩

    非监督学习之k-means K-means通常被称为劳埃德算法,这在数据聚类中是最经典的,也是相对容易理解的模型.算法执行的过程分为4个阶段. 1.从数据中选择k个对象作为初始聚类中心; 2.计算每个 ...

  7. 如何批量压缩图片?这两种方法轻松批量压缩

    怎么批量压缩图片呢?图片是我们日常生活中常用的一种文件形式,不管是游玩还是学习或办公,或多或少都会使用到图片.但是随着智能手机的相机功能越来越强大,像素越来越高,所拍摄出来的照片内存非常大,当使用的图 ...

  8. android 和RxJava配合使用的两个图片压缩框架LuBan、Compressor

    在android中,图片压缩已经是必备技能,相信大家都有自己的工具类,但是在如果你的项目中使用了RxJava,那么为了保证代码的风统一性,使用LuBan或者Compressor就在合适不过了! LuB ...

  9. 前端实现GIF图片压缩上传

    前言 最近接到上级通知,文件如下: 奉天承运,公司诏曰:介于前端组表现优异,后端组忙里偷不出闲,GIF压缩这一块特赐予前端组. 钦此, 不一会后端群众就送来了亲切的问候,千万个草泥马在我的心中奔跑 吃 ...

最新文章

  1. class.forname找不到类_15个“专科专业”就业找工作容易,关注热度也挺高,报考比较靠谱...
  2. JavaScript TreeView
  3. Javascript中闭包的作用域链
  4. a good resource gathering system from sustech
  5. h700通话糊 索尼wi_专业的事还是要交给专业的人,盘点索尼千元以下的好耳机...
  6. Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布
  7. 哇!单细胞测序-配体受体互作分析原来可以这么简单又高大上!
  8. php-fpm.conf 配置文件详解
  9. Scala Singleton对象
  10. 学习总结-《父与子的编程之旅》chapter 17
  11. 世界人工智能大赛 Top1 方案!手写体 OCR 识别
  12. 沟通CTBS金融行业远程接入解决方案
  13. 怎样解决Mac电脑键盘上的大写锁定键灯不亮?
  14. CR渲染器全景图如何渲染颜色通道_【3D】日不落投影灯 VR/CR投影效果制作
  15. win10 远程桌面和向日葵远控哪个好用
  16. Redis中的Lua脚本怎么玩
  17. SSD1963+STM32F4+RGB565 TFT调试
  18. Hadoop HA (一) --------- HA 概述 与 HDFS-HA 集群搭建
  19. JS组合函数(Composition):原来如此!
  20. Mac格式化移动硬盘DiskUtil

热门文章

  1. 又肝了下微服务 API 网关“金刚”,也是蛮香的~
  2. 为啥开发的文档能力是核心竞争力之一
  3. 62岁程序员植入逻辑炸弹, 面临10年监禁和25万美元罚款
  4. 一个妹子的美团面试经历,成功拿到 Offer
  5. 关于小型长周期项目的一些建议
  6. 一个经典面试题:如何保证缓存与数据库的双写一致性?
  7. java高级应用:线程池全面解析
  8. HashiCorp Nomad和遗留系统
  9. Spring Boot 性能优化
  10. 义教资料均衡验收计算机室解说词,义教均衡迎检现场会导引解说词