PHP实现图片压缩的两则实例


Posted in PHP onJuly 19, 2014

本文介绍了PHP实现图片压缩的两种方法,读者可以根据具体应用参考或加以改进,以适应自身应用需求!废话不多说,主要代码部分如下:

实例1:

<?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:

<?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>
PHP 相关文章推荐
IStream与TStream之间的相互转换
Aug 01 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
PHP数组与字符串互相转换实例
May 05 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 #PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 #PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 #PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 #PHP
简单实用的网站PHP缓存类实例
Jul 18 #PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 #PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 #PHP
You might like
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
PHP的博客ping服务代码
2012/02/04 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
php中的异常和错误浅析
2017/05/03 PHP
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
详解javascript replace高级用法
2019/02/17 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
python已协程方式处理任务实现过程
2019/12/27 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python 基于opencv操作摄像头
2020/12/24 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
咖啡店自主创业商业计划书
2014/01/22 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
公司酒会主持词
2015/07/02 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python