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 相关文章推荐
discuz的php防止sql注入函数
Jan 17 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP入门教程之上传文件实例详解
Sep 11 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
详解php反序列化
Jun 10 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
thinkphp学习笔记之多表查询
2014/07/28 PHP
php中getservbyport与getservbyname函数用法实例
2014/11/18 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
Javascript----文件操作
2007/01/18 Javascript
javascript操作文本框readOnly
2007/05/15 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
js创建对象的方式总结
2015/01/10 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
python实现rsa加密实例详解
2017/07/19 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python制作词云的方法
2018/01/03 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
安装python及pycharm的教程图解
2019/10/10 Python
python如何实现单链表的反转
2020/02/10 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
上海某公司.net方向笔试题
2014/09/14 面试题
通息工程毕业生自荐信
2013/10/16 职场文书
学校办公室主任职责
2013/12/27 职场文书
小学生作文评语
2014/04/18 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技