PHP實現(xiàn)高清晰度無損圖片壓縮功能的代碼
經(jīng)常會用到把上傳的大圖片壓縮,特別是體積,在微信等APP應(yīng)用上,也默認都是有壓縮的,那么,怎么樣對圖片大幅度壓縮卻仍能保持較高的清晰度呢?...
經(jīng)常會用到把上傳的大圖片壓縮,特別是體積,在微信等APP應(yīng)用上,也默認都是有壓縮的,那么,怎么樣對圖片大幅度壓縮卻仍能保持較高的清晰度呢?
壓縮通常是有按比例縮放,和指定寬度壓縮的,效果很不錯,一個數(shù)碼相機拍的4M圖片,壓縮后保持了較高的清晰度和原圖寬高值,只有700K。
下面是代碼(有兩個文件,imgcompress.class.php 類,及compress.php)
compress.php
<?phprequire_once'imgcompress.class.php';$source='test.png';//原圖文件名$dst_img='test_.png';//保存圖片的文件名$percent= ; #原圖壓縮,不縮放,但體積大大降低$image= (newimgcompress($source,$percent))->compressImg($dst_img);
imgcompress.class.php
<?php/*** 圖片壓縮類:通過縮放來壓縮。* 如果要保持源圖比例,把參數(shù)$percent保持為即可。* 即使原比例壓縮,也可大幅度縮小。數(shù)碼相機M圖片。也可以縮為KB左右。如果縮小比例,則體積會更小。** 結(jié)果:可保存、可直接顯示。*/classimgcompress{private$src;private$image;private$imageinfo;private$percent= .;/*** 圖片壓縮* @param $src 源圖* @param float $percent 壓縮比例*/publicfunction__construct($src,$percent=){$this->src =$src;$this->percent =$percent;}/** 高清壓縮圖片* @param string $saveName 提供圖片名(可不帶擴展名,用源圖擴展名)用于保存。或不提供文件名直接顯示*/publicfunctioncompressImg($saveName=''){$this->_openImage();if(!empty($saveName))$this->_saveImage($saveName);//保存else$this->_showImage();}/*** 內(nèi)部:打開圖片*/privatefunction_openImage(){list($width,$height,$type,$attr) =getimagesize($this->src);$this->imageinfo =array('width'=>$width,'height'=>$height,'type'=>image_type_to_extension($type,false),'attr'=>$attr);$fun="imagecreatefrom".$this->imageinfo['type'];$this->image =$fun($this->src);$this->_thumpImage();}/*** 內(nèi)部:操作圖片*/privatefunction_thumpImage(){$new_width=$this->imageinfo['width'] *$this->percent;$new_height=$this->imageinfo['height'] *$this->percent;$image_thump= imagecreatetruecolor($new_width,$new_height);//將原圖復制帶圖片載體上面,并且按照一定比例壓縮,極大的保持了清晰度imagecopyresampled($image_thump,$this->image,,,,,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);imagedestroy($this->image);$this->image =$image_thump;}/*** 輸出圖片:保存圖片則用saveImage()*/privatefunction_showImage(){header('Content-Type: image/'.$this->imageinfo['type']);$funcs="image".$this->imageinfo['type'];$funcs($this->image);}/*** 保存圖片到硬盤:* @param string $dstImgName 、可指定字符串不帶后綴的名稱,使用源圖擴展名 。、直接指定目標圖片名帶擴展名。*/privatefunction_saveImage($dstImgName){if(empty($dstImgName))returnfalse;$allowImgs= ['.jpg','.jpeg','.png','.bmp','.wbmp','.gif'];//如果目標圖片名有后綴就用目標圖片擴展名 后綴,如果沒有,則用源圖的擴展名$dstExt=strrchr($dstImgName,".");$sourseExt=strrchr($this->src ,".");if(!empty($dstExt))$dstExt=strtolower($dstExt);if(!empty($sourseExt))$sourseExt=strtolower($sourseExt);//有指定目標名擴展名if(!empty($dstExt) && in_array($dstExt,$allowImgs)){$dstName=$dstImgName;}elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){$dstName=$dstImgName.$sourseExt;}else{$dstName=$dstImgName.$this->imageinfo['type'];}$funcs="image".$this->imageinfo['type'];$funcs($this->image,$dstName);}/*** 銷毀圖片*/publicfunction__destruct(){imagedestroy($this->image);}}
使用之后個人感覺 $percent 設(shè)置為0.5 左右就不錯了,壓縮后的圖片與原圖質(zhì)量基本一樣。
總結(jié)
以上所述是小編給大家介紹的php高清晰度無損圖片壓縮功能的實現(xiàn)代碼,希望對大家有所幫助。
- PHP圖像處理繪圖、水印、驗證碼、圖像壓縮技術(shù)實例總
- 用PHP處理png圖片白色背景色改為透明色的實例代碼
- 關(guān)于PHP往mysql數(shù)據(jù)庫中批量插入數(shù)據(jù)實例教程
- Php兩點地理坐標距離的計算方法和具體代碼
- PHP獲取HTTP body內(nèi)容的方法
- PHP面向?qū)ο蟪绦蛟O(shè)計中獲取對象屬性的3種方法實例分析
- php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧
- Windows7下IIS+php配置教程詳細介紹
- PHP序列化的四種實現(xiàn)方法與橫向?qū)Ρ冉坛?/a>
- PHP基于Redis消息隊列實現(xiàn)的消息推送的方法
PHP圖像處理繪圖、水印、驗證碼、圖像壓縮技術(shù)實例總結(jié)
文章主要介紹了PHP圖像處理技術(shù),結(jié)合實例形式總結(jié)分析了php繪圖、水印、驗證碼、圖像壓縮等相關(guān)函數(shù)、功能與圖形繪制實現(xiàn)技巧,需要的朋友可以參考下:1、繪圖 場景:...
用PHP處理png圖片白色背景色改為透明色的實例代碼
文章主要介紹了php 處理png圖片白色背景色改為透明色的實例代碼,文中通過實例代碼給大家介紹了用PHP的GD庫把圖片的背景替換成透明背景,需要的朋友參考下...
關(guān)于PHP往mysql數(shù)據(jù)庫中批量插入數(shù)據(jù)實例教程
文章主要給大家介紹了關(guān)于php往mysql中批量插入數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧...
Php兩點地理坐標距離的計算方法和具體代碼
文章主要為大家詳細介紹了php兩點地理坐標距離的計算方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下php計算兩點地理坐標距離的具體代碼,具體內(nèi)容如下功能:根據(jù)圓周率和...
PHP獲取HTTP body內(nèi)容的方法
今天小編就為大家分享一篇PHP獲取HTTP body內(nèi)容的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧有時候我們獲取數(shù)據(jù)時需要根據(jù)Header中的格式來解析,比...
PHP面向?qū)ο蟪绦蛟O(shè)計中獲取對象屬性的3種方法實例分析
文章主要介紹了PHP獲取對象屬性的三種方法,結(jié)合實例形式分析了php面向?qū)ο蟪绦蛟O(shè)計中獲取對象屬性的常見操作技巧,需要的朋友可以參考下。PHP獲取對象屬性的三種方法,具體如下...
php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧
文章主要介紹了PHP yield關(guān)鍵字功能與用法,結(jié)合實例形式分析了php5.5新增的yield關(guān)鍵字功能與相關(guān)使用技巧,需要的朋友可以參考下實例講述PHP yield關(guān)鍵字功能與用法具體如下:y...
Windows7下IIS+php配置教程詳細介紹
文章主要為大家詳細介紹了Windows7下IIS+php配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下...
PHP序列化的四種實現(xiàn)方法與橫向?qū)Ρ冉坛?/a>
在PHP中,序列化用于存儲或傳遞 PHP 的值的過程中,同時不丟失其類型和結(jié)構(gòu)。本文講述PHP序列化的四種方案,感興趣的可以了解一下一、PHP 序列化變量的 4 種方法序列化是將變量轉(zhuǎn)...
PHP基于Redis消息隊列實現(xiàn)的消息推送的方法
文章主要介紹了php基于Redis消息隊列實現(xiàn)的消息推送的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧基本知識點重點用到了以下命令實現(xiàn)我們...

