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

5年以前  |  阅读数:355 次  |  编程语言:PHP 

本文介绍了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例