php之圖片處理類縮略圖加水印
用到兩個image係統函數
imagecopymerge — 拷貝並合並圖像的一部分
imagecopyresampled — 重采樣拷貝部分圖像並調整大小
/* 如何知道圖片的大小和類型 無法確認調用函數:Imagecreatefrompng/jpeg…… 可以獨處圖片的寬和高 相當於寬高是已知的 一個重要的函數getimagesize() */ /* 想操作圖片 先把圖片的大小,類型信息得到 水印:就是把指定的水印複製到目標上,並加透明效果 縮略圖:就是把大圖片複製到小尺寸畫麵上 */ class ImageTool{ //imageinfo 分析圖片的信息 //return array() public static function imageInfo($image){ //判斷圖片是否存在 if(!file_exists($image)){ return false; } $info = getimagesize($image); if($info == false){ return false; } //此時info分析出來是一個數組 $img['width'] = $info[0]; $img['height'] = $info[1]; //分析圖片的後綴 $img['ext'] = substr($info['mime'],strpos($info['mime'],'/')+1); return $img; } /* 加水印 string $dst 待操作圖片 $water 水印小圖 $save 不填,則默認替換原始圖 $alpha 透明度 $pos 水印圖放的位置1234,順時針 */ public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){ //先保證兩個圖片存在 if(!file_exists($dst) || !file_exists($water)){ return false; } //1.保證水印不能比待操作圖片還大 $dinfo = self::imageInfo($dst); $winfo = self::imageInfo($water); //判斷 if($winfo['height'] > $dinfo['height'] || $winfo['width'] > $dinfo['width']){ return false; } //兩張圖,讀到畫布上,但是圖片可能是png,可能是jpeg,用什麼函數來讀 $dfunc = 'imagecreatefrom' .$dinfo['ext']; $wfunc = 'imagecreatefrom' .$winfo['ext']; if(!function_exists($dfunc) || !function_exists($wfunc)){ return false; } //動態加載函數來創建畫布 $dim = $dfunc($dst); //創建待操作的畫布 $wim = $wfunc($water); //創建水印畫布 //根據水印的位置,計算粘貼的坐標 switch($pos){ case 0; //左上角 $posx = 0; $posy = 0; break; case 1; //右上角 $posx = $dinfo['width'] - $winfo['width']; $posy = 0; break; case 2; //左下角 $posx = 0; $posy = $dinfo['height'] - $winfo['height']; break; default: //默認右下角 $posx = $dinfo['width'] - $winfo['width']; $posy = $dinfo['height'] - $winfo['height']; } //加水印 在什麼位置? // imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct ) imagecopymerge($dim,$wim,$posx,$posy,0,0,$winfo['width'],$winfo['height'],$alpha); if(!$save){ $save=$dst; unlink($dst); //刪除原圖 } //保存圖片 $createfunc = 'image' . $dinfo['ext']; $createfunc($dim,$save); //銷毀圖片 imagedestroy($dim); imagedestroy($wim); return true; } /* thumb 生成縮略圖 等比例縮放,兩邊留白 */ public static function thumb($dst,$save=NULL,$width=200,$height=200){ //首先判斷待處理的圖片是否存在 $dinfo = self::imageInfo($dst); if($dinfo == false){ return false; } //計算縮放比例 $calc = min($width/$dinfo['width'],$height/$dinfo['height']); //創建原始圖的畫布 $dfunc = 'imagecreatefrom'.$dinfo['ext']; $dim = $dfunc($dst); //創建縮略圖畫布 $tim = imagecreatetruecolor($width,$height); //創建白色填充縮略圖畫布 $white = imagecolorallocate($tim,255,255,255); //填充縮略畫布 imagefill($tim,0,0,$white); //複製並縮略 $dwidth = (int)$dinfo['width']*$calc; $dheight = (int)$dinfo['height']*$calc; $paddingx = ($width - $dwidth) / 2; $paddingy = ($height - $dheight) /2; imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidth,$dheight,$dinfo['width'],$dinfo['height']); //保存圖片 if(!$save){ $save = $dst; unlink($dst); } $createfun = 'image'.$dinfo['ext']; $createfun($tim,$save); imagedestroy($dim); imagedestroy($tim); return true; }
調用傳參:
//調用傳參 加水印 echo ImageTool::water('原圖片地址','加水印圖片地址','生成圖片')?'ok':false;
//調用 縮略圖 echo ImageTool::thumb('原圖地址','生成圖片地址',200,200)?'ok':false;
最後更新:2017-04-02 22:15:57
上一篇:
uva 10391 - Compound Words
下一篇:
12.9 訓練 E - Ternary Password
視頻遊戲開發商Sega遭黑客攻擊泄露用戶信息
濡備綍鎵嶈兘鎴愪負涓€鍚嶄紭縐€鐨勮蔣浠舵祴璿曚漢鍛?鍗氬-浜戞爾紺懼尯-闃塊噷浜?
Kubernetes1.7正式發布,優化了可擴展性,安全增強和網絡通信策略
阿裏雲發布POLARDB的背後,未來3年無自研數據庫的雲計算玩家將被淘汰
[原創]為單位編寫的航空貨物進港管理係統(VB6.0)
Linux-0.0.1內核閱讀連載筆記-2013.08.21
基於容器服務的持續集成與雲端交付(五)- 探究持續交付係統的本質
PhoneGap Plugin與Wind.js結合,實現異步通信
android之listview緩存圖片(緩存優化)
linux/Aix啟動、關閉Oracle及監聽