首頁 後端開發 php教程 PHP-图片压缩

PHP-图片压缩

Jun 23, 2016 pm 02:30 PM

方式一:

<?php/*----------------------------------------------------------------------函数:调整图片尺寸或生成缩略图修改:2009-8-8返回:True/False参数:   $Image   需要调整的图片(含路径)   $Dw=450   调整时最大宽度;缩略图时的绝对宽度   $Dh=450   调整时最大高度;缩略图时的绝对高度   $Type=1   1,调整尺寸; 2,生成缩略图作者:Seven(QQ:9256114)WWW.7DI.NET*/$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."\"  / alt="PHP-图片压缩" >"; }?></body></html>
登入後複製

方式二:

PHP图片压缩的类<?phpclass ThumbHandler{var $dst_img;// 目标文件var $h_src; // 图片资源句柄var $h_dst;// 新图句柄var $h_mask;// 水印句柄var $img_create_quality = 100;// 图片生成质量var $img_display_quality = 80;// 图片显示质量,默认为75var $img_scale = 0;// 图片缩放比例var $src_w = 0;// 原图宽度var $src_h = 0;// 原图高度var $dst_w = 0;// 新图总宽度var $dst_h = 0;// 新图总高度var $fill_w;// 填充图形宽var $fill_h;// 填充图形高var $copy_w;// 拷贝图形宽var $copy_h;// 拷贝图形高var $src_x = 0;// 原图绘制起始横坐标var $src_y = 0;// 原图绘制起始纵坐标var $start_x;// 新图绘制起始横坐标var $start_y;// 新图绘制起始纵坐标var $mask_word;// 水印文字var $mask_img;// 水印图片var $mask_pos_x = 0;// 水印横坐标var $mask_pos_y = 0;// 水印纵坐标var $mask_offset_x = 5;// 水印横向偏移var $mask_offset_y = 5;// 水印纵向偏移var $font_w;// 水印字体宽var $font_h;// 水印字体高var $mask_w;// 水印宽var $mask_h;// 水印高var $mask_font_color = "#ffffff";// 水印文字颜色var $mask_font = 2;// 水印字体var $font_size;// 尺寸var $mask_position = 0;// 水印位置var $mask_img_pct = 50;// 图片合并程度,值越大,合并程序越低var $mask_txt_pct = 50;// 文字合并程度,值越小,合并程序越低var $img_border_size = 0;// 图片边框尺寸var $img_border_color;// 图片边框颜色var $_flip_x=0;// 水平翻转次数var $_flip_y=0;// 垂直翻转次数var $cut_type=0;// 剪切类型var $img_type;// 文件类型// 文件类型定义,并指出了输出图片的函数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);// 填充背景色       }}
登入後複製

  

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

See all articles