当前位置:Gxlcms > PHP教程 > PHP-图片压缩

PHP-图片压缩

时间:2021-07-01 10:21:17 帮助过:7人阅读

方式一:

$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; }}?>"; }?>

方式二:

PHP图片压缩的类输出图片的函数var $all_type = array(       "jpg"   => array("output"=>"imagejpeg"),       "gif"   => array("output"=>"imagegif"),       "png"   => array("output"=>"imagepng"),       "wbmp" => array("output"=>"image2wbmp"),       "jpeg" => array("output"=>"imagejpeg"));/**    * 构造函数    */function ThumbHandler(){       $this->mask_font_color = "#ffffff";       $this->font = 2;       $this->font_size = 12;}/**    * 取得图片的宽    */function getImgWidth($src){       return imagesx($src);}/**    * 取得图片的高    */function getImgHeight($src){       return imagesy($src);}/**    * 设置图片生成路径    *    * @param string $src_img 图片生成路径    */function setSrcImg($src_img, $img_type=null){       if(!file_exists($src_img))       {         die("图片不存在");       }             if(!empty($img_type))       {         $this->img_type = $img_type;       }       else       {         $this->img_type = $this->_getImgType($src_img);       }             $this->_checkValid($this->img_type);       // file_get_contents函数要求php版本>4.3.0       $src = '';       if(function_exists("file_get_contents"))       {         $src = file_get_contents($src_img);       }       else       {         $handle = fopen ($src_img, "r");         while (!feof ($handle))         {            $src .= fgets($fd, 4096);                                   }         fclose ($handle);       }       if(empty($src))       {         die("图片源为空");       }       $this->h_src = @ImageCreateFromString($src);       $this->src_w = $this->getImgWidth($this->h_src);       $this->src_h = $this->getImgHeight($this->h_src);}/**    * 设置图片生成路径    *    * @param string $dst_img 图片生成路径    */function setDstImg($dst_img){       $arr   = explode('/',$dst_img);       $last = array_pop($arr);       $path = implode('/',$arr);       $this->_mkdirs($path);       $this->dst_img = $dst_img;}/**    * 设置图片的显示质量    *    * @param string    $n 质量    */function setImgDisplayQuality($n){       $this->img_display_quality = (int)$n;}/**    * 设置图片的生成质量    *    * @param string    $n 质量    */function setImgCreateQuality($n){       $this->img_create_quality = (int)$n;}/**    * 设置文字水印    *    * @param string     $word 水印文字    * @param integer $font 水印字体    * @param string     $color 水印字体颜色    */function setMaskWord($word){       $this->mask_word .= $word;}/**    * 设置字体颜色    *    * @param string     $color 字体颜色    */function setMaskFontColor($color="#ffffff"){       $this->mask_font_color = $color;}/**    * 设置水印字体    *    * @param string|integer $font 字体    */function setMaskFont($font=2){       if(!is_numeric($font) && !file_exists($font))       {         die("字体文件不存在");       }       $this->font = $font;}/**    * 设置文字字体大小,仅对truetype字体有效    */function setMaskFontSize($size = "12"){       $this->font_size = $size;}/**    * 设置图片水印    *    * @param string $img     水印图片源    */function setMaskImg($img){       $this->mask_img = $img;}/**    * 设置水印横向偏移    *    * @param integer     $x 横向偏移量    */function setMaskOffsetX($x){       $this->mask_offset_x = (int)$x;}/**    * 设置水印纵向偏移    *    * @param integer     $y 纵向偏移量    */function setMaskOffsetY($y){       $this->mask_offset_y = (int)$y;}/**    * 指定水印位置    *    * @param integer     $position 位置,1:左上,2:左下,3:右上,0/4:右下    */function setMaskPosition($position=0){       $this->mask_position = (int)$position;}/**    * 设置图片合并程度    *    * @param integer     $n 合并程度    */function setMaskImgPct($n){       $this->mask_img_pct = (int)$n;}/**    * 设置文字合并程度    *    * @param integer     $n 合并程度    */function setMaskTxtPct($n){       $this->mask_txt_pct = (int)$n;}/**    * 设置缩略图边框    *    * @param (类型)     (参数名) (描述)    */function setDstImgBorder($size=1, $color="#000000"){       $this->img_border_size   = (int)$size;       $this->img_border_color = $color;}/**    * 水平翻转    */function flipH(){       $this->_flip_x++;}/**    * 垂直翻转    */function flipV(){       $this->_flip_y++;}/**    * 设置剪切类型    *    * @param (类型)     (参数名) (描述)    */function setCutType($type){       $this->cut_type = (int)$type;}/**    * 设置图片剪切    *    * @param integer     $width 矩形剪切    */function setRectangleCut($width, $height){       $this->fill_w = (int)$width;       $this->fill_h = (int)$height;}/**    * 设置源图剪切起始坐标点    *    * @param (类型)     (参数名) (描述)    */function setSrcCutPosition($x, $y){       $this->src_x   = (int)$x;       $this->src_y   = (int)$y;}/**    * 创建图片,主函数    * @param integer $a     当缺少第二个参数时,此参数将用作百分比,    *                             否则作为宽度值    * @param integer $b     图片缩放后的高度    */function createImg($a, $b=null){       $num = func_num_args();       if(1 == $num)       {         $r = (int)$a;         if($r < 1)         {            die("图片缩放比例不得小于1");         }         $this->img_scale = $r;         $this->_setNewImgSize($r);       }       if(2 == $num)       {         $w = (int)$a;         $h = (int)$b;         if(0 == $w)         {            die("目标宽度不能为0");         }         if(0 == $h)         {            die("目标高度不能为0");         }         $this->_setNewImgSize($w, $h);       }       if($this->_flip_x%2!=0)       {         $this->_flipH($this->h_src);       }       if($this->_flip_y%2!=0)       {         $this->_flipV($this->h_src);       }       $this->_createMask();       $this->_output();       // 释放       if(imagedestroy($this->h_src) && imagedestroy($this->h_dst))       {         Return true;       }       else       {         Return false;       }}/**    * 生成水印,调用了生成水印文字和水印图片两个方法    */function _createMask(){       if($this->mask_word)       {         // 获取字体信息         $this->_setFontInfo();         if($this->_isFull())         {            die("水印文字过大");         }         else         {            $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);            $white = ImageColorAllocate($this->h_dst,255,255,255);            imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色            $this->_drawBorder();            imagecopyresampled( $this->h_dst, $this->h_src,                                 $this->start_x, $this->start_y,                                 $this->src_x, $this->src_y,                                 $this->fill_w, $this->fill_h,                                 $this->copy_w, $this->copy_h);            $this->_createMaskWord($this->h_dst);         }       }       if($this->mask_img)       {         $this->_loadMaskImg();//加载时,取得宽高         if($this->_isFull())         {            // 将水印生成在原图上再拷            $this->_createMaskImg($this->h_src);            $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);            $white = ImageColorAllocate($this->h_dst,255,255,255);            imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色            $this->_drawBorder();            imagecopyresampled( $this->h_dst, $this->h_src,                                 $this->start_x, $this->start_y,                                 $this->src_x, $this->src_y,                                 $this->fill_w, $this->start_y,                                 $this->copy_w, $this->copy_h);         }         else         {            // 创建新图并拷贝            $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);            $white = ImageColorAllocate($this->h_dst,255,255,255);            imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色            $this->_drawBorder();            imagecopyresampled( $this->h_dst, $this->h_src,                                 $this->start_x, $this->start_y,                                 $this->src_x, $this->src_y,                                 $this->fill_w, $this->fill_h,                                 $this->copy_w, $this->copy_h);            $this->_createMaskImg($this->h_dst);         }       }       if(empty($this->mask_word) && empty($this->mask_img))       {         $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);         $white = ImageColorAllocate($this->h_dst,255,255,255);         imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色         $this->_drawBorder();         imagecopyresampled( $this->h_dst, $this->h_src,                     $this->start_x, $this->start_y,                     $this->src_x, $this->src_y,                     $this->fill_w, $this->fill_h,                     $this->copy_w, $this->copy_h);       }}/**    * 画边框    */function _drawBorder(){       if(!empty($this->img_border_size))       {         $c = $this->_parseColor($this->img_border_color);         $color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]);         imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 填充背景色       }}

  

人气教程排行