最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP圖片水印類的封裝

 更新時(shí)間:2017年07月06日 09:38:13   作者:東東東蔚  
這篇文章主要為大家詳細(xì)介紹了PHP圖片水印類的封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

封裝PHP的圖片水印的類,供大家參考,具體內(nèi)容如下

<?php
header('Content-type:text/html;charset=utf8');
$img = new Image();
// $img->water('2a.jpg','logo.gif',0);
class Image{
  //路徑
  protected $path;
  //是否啟用隨機(jī)名字
  protected $isRandName;
  //要保存的圖像類型
  protected $type;
  
  //通過(guò)構(gòu)造方法隊(duì)成員屬性進(jìn)行初始化
  function __construct($path='./',$isRandName=true,$type='png'){
    $this->path = $path;
    $this->isRandName = $isRandName;
    $this->type = $type;
  }
  //對(duì)外公開(kāi)的水印方法
  
  /**
   * @param char $image  原圖
   * @param char $water  水印圖片
   * @param char $postion 位置
   * @param int $tmp   透明度
   * @param char $prefix 前綴
   */
  function water($image,$water,$postion,$tmp=100,$prefix='water_'){
    //判斷這兩個(gè)圖片是否存在
    if(!file_exists($image)||!file_exists($water)){
      die('圖片資源不存在');
    }
    //得到原圖和水印圖片的寬高
    $imageInfo = self::getImageInfo($image);
    $waterInfo = self::getImageInfo($water);
    //判斷水印圖片是否能貼上來(lái)
    if (!$this->checkImage($imageInfo,$waterInfo)){
      die('水印圖片太大');
    }
    //打開(kāi)圖片
    $imageRes = self::openAnyImage($image);
    $waterRes = self::openAnyImage($water);
    //根據(jù)水印圖片的位置計(jì)算水印圖片的坐標(biāo)
    $pos = $this->getPosition($postion,$imageInfo,$waterInfo);
    //將水印圖片貼過(guò)來(lái)
    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;
    //通過(guò)變量函數(shù)進(jìn)行保存
    $func($imageRes,$newPath);
  }
  //得到文件名函數(shù)
  protected function createNewName($imagePath,$prefix){
    if ($this->isRandName){
      $name = $prefix.uniqid().'.'.$this->type;
    }else {
      $name = $prefix.pathinfo($imagePath)['filename'].'.'.$this->type;
    }
    return $name;
  }
  //根據(jù)位置計(jì)算水印圖片的坐標(biāo)
  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;
  }
  //靜態(tài)方法。根據(jù)圖片的路徑得到圖片的信息,寬度,高度、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'];
    //根據(jù)不同的mime類型打開(kāi)不同的圖像
    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;
  }
  
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Laravel 加載第三方類庫(kù)的方法

    Laravel 加載第三方類庫(kù)的方法

    這篇文章主要介紹了Laravel 加載第三方類庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • PHP模板引擎Smarty自定義變量調(diào)解器用法

    PHP模板引擎Smarty自定義變量調(diào)解器用法

    這篇文章主要介紹了PHP模板引擎Smarty自定義變量調(diào)解器用法,較為詳細(xì)的分析了smarty變量調(diào)節(jié)器的用法與自定義變量調(diào)節(jié)器的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • phpcms手機(jī)內(nèi)容頁(yè)面添加上一篇和下一篇

    phpcms手機(jī)內(nèi)容頁(yè)面添加上一篇和下一篇

    本文給大家分享的是在phpcms中的手機(jī)內(nèi)容詳情頁(yè)里添加上一篇和下一篇的方法,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • php floor()函數(shù)案例詳解

    php floor()函數(shù)案例詳解

    這篇文章主要介紹了php floor()函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 最新評(píng)論

    泉州市| 扬中市| 麟游县| 黄龙县| 龙泉市| 大邑县| 民丰县| 玉环县| 石首市| 巴里| 武冈市| 睢宁县| 安乡县| 乌拉特前旗| 双桥区| 大理市| 白银市| 阿巴嘎旗| 南通市| 山东省| 金山区| 苏尼特右旗| 闽清县| 青阳县| 藁城市| 治多县| 陵水| 应城市| 潮安县| 元氏县| 五寨县| 乐亭县| 灵武市| 武隆县| 罗田县| 滨州市| 遂宁市| 资阳市| 鹿邑县| 梓潼县| 肇源县|