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 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
thinkphp获取栏目和文章当前位置的方法
Oct 29 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
php session的锁和并发
Jan 22 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 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
php防注
2007/01/15 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
围观tangram js库
2010/12/28 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Python入门篇之字典
2014/10/17 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python实现求数列和的方法示例
2018/01/12 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
Python中作用域的深入讲解
2018/12/10 Python
python3.5安装python3-tk详解
2019/04/26 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python基于requests库爬取网站信息
2020/03/02 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
小学教育毕业生自荐信
2013/11/18 职场文书
家属慰问信
2015/02/14 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript