您好,登錄后才能下訂單哦!
這篇文章主要介紹PHP如何封裝圖片水印類,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
封裝PHP的圖片水印的類,具體內容如下
<?php header('Content-type:text/html;charset=utf8'); $img = new Image(); // $img->water('2a.jpg','logo.gif',0); class Image{ //路徑 protected $path; //是否啟用隨機名字 protected $isRandName; //要保存的圖像類型 protected $type; //通過構造方法隊成員屬性進行初始化 function __construct($path='./',$isRandName=true,$type='png'){ $this->path = $path; $this->isRandName = $isRandName; $this->type = $type; } //對外公開的水印方法 /** * @param char $image 原圖 * @param char $water 水印圖片 * @param char $postion 位置 * @param int $tmp 透明度 * @param char $prefix 前綴 */ function water($image,$water,$postion,$tmp=100,$prefix='water_'){ //判斷這兩個圖片是否存在 if(!file_exists($image)||!file_exists($water)){ die('圖片資源不存在'); } //得到原圖和水印圖片的寬高 $imageInfo = self::getImageInfo($image); $waterInfo = self::getImageInfo($water); //判斷水印圖片是否能貼上來 if (!$this->checkImage($imageInfo,$waterInfo)){ die('水印圖片太大'); } //打開圖片 $imageRes = self::openAnyImage($image); $waterRes = self::openAnyImage($water); //根據水印圖片的位置計算水印圖片的坐標 $pos = $this->getPosition($postion,$imageInfo,$waterInfo); //將水印圖片貼過來 imagecopymerge($imageRes, $waterRes, $pos['x'], $pos['y'], 0, 0, $waterInfo["width"], $waterInfo["height"], $tmp); //得到要保存圖片的文件名 $newName = $this->createNewName($image,$prefix); //得到保存圖片的路徑,也就是文件的全路徑 $newPath = rtrim($this->path,'/').'/'.$newName; //保存圖片 $this->saveImage($imageRes,$newPath); //銷毀資源 imagedestroy($imageRes); imagedestroy($waterRes); //返回路徑 return $newPath; } //保存圖像資源 protected function saveImage($imageRes,$newPath){ $func = 'image'.$this->type; //通過變量函數進行保存 $func($imageRes,$newPath); } //得到文件名函數 protected function createNewName($imagePath,$prefix){ if ($this->isRandName){ $name = $prefix.uniqid().'.'.$this->type; }else { $name = $prefix.pathinfo($imagePath)['filename'].'.'.$this->type; } return $name; } //根據位置計算水印圖片的坐標 protected function getPosition($postion,$imageInfo,$waterInfo){ switch ($postion){ case 1: $x = 0; $y = 0; break; case 2: $x = ($imageInfo['width']-$waterInfo["width"])/2; $y = 0; break; case 3: $x = $imageInfo["width"]- $waterInfo["width"]; $y = 0; break; case 4: $x = 0; $y = ($imageInfo["height"]-$waterInfo["height"])/2; break; case 5: $x = ($imageInfo['width']-$waterInfo["width"])/2; $y = ($imageInfo["height"]-$waterInfo["height"])/2; break; case 6: $x = $imageInfo["width"]- $waterInfo["width"]; $y = ($imageInfo["height"]-$waterInfo["height"])/2; break; case 7: $x = 0; $y = $imageInfo['height'] - $waterInfo["height"]; break; case 8: $x = ($imageInfo['width']-$waterInfo["width"])/2; $y = $imageInfo['height'] - $waterInfo["height"]; break; case 9: $x = $imageInfo["width"]- $waterInfo["width"]; $y = $imageInfo['height'] - $waterInfo["height"]; break; case 0: $x = mt_rand(0, $imageInfo["width"]- $waterInfo["width"]); $y = mt_rand(0, $imageInfo['height'] - $waterInfo["height"]); break; } return ['x'=>$x , 'y'=>$y]; } protected function checkImage($imageInfo,$waterInfo){ if (($waterInfo['width'] > $imageInfo['width'])||($waterInfo['height'] > $imageInfo['height'])){ return false; } return true; } //靜態方法。根據圖片的路徑得到圖片的信息,寬度,高度、mime類型 static function getImageInfo($imagePath){ $info = getimagesize($imagePath); $data['width']=$info[0]; $data['height']=$info[1]; $data['mime'] = $info['mime']; return $data; } static function openAnyImage($imagePath){ //得到圖像的mime類型 $mime = self::getImageInfo($imagePath)['mime']; //根據不同的mime類型打開不同的圖像 switch ($mime){ case 'image/png': $image = imagecreatefrompng($imagePath); break; case 'image/gif': $image = imagecreatefromgif($imagePath); break; case 'image/jpeg': $image = imagecreatefromjpeg($imagePath); break; case 'image/wbmp': $image = imagecreatefromwbmp($imagePath); break; } return $image; } }
以上是“PHP如何封裝圖片水印類”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。