中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP如何封裝圖片水印類

發布時間:2021-08-18 09:36:07 來源:億速云 閱讀:126 作者:小新 欄目:開發技術

這篇文章主要介紹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如何封裝圖片水印類”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

绥宁县| 大荔县| 琼海市| 稻城县| 平泉县| 呼和浩特市| 怀集县| 珲春市| 舞阳县| 朝阳区| 罗田县| 平凉市| 息烽县| 桐柏县| 威宁| 东明县| 靖远县| 东山县| 萝北县| 阳江市| 深水埗区| 保定市| 浑源县| 建平县| 宁晋县| 高雄市| 迁西县| 曲麻莱县| 安顺市| 阜城县| 临汾市| 沐川县| 阳东县| 长子县| 托克逊县| 波密县| 临武县| 鄂托克旗| 和静县| 江源县| 芷江|