巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

PHP图片水印类的封装

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-25 14:41:31 阅读数: 106

封装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开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干消息more

20
04月
在IE6系列等老式阅读器中利用HTML5的新

HTML5 向开辟职员供给了良多新的标签, 如 section, nav, article, header 和 footer 等. 这些标签... >>概况

26
04月
php微信公家平台开辟(一) 设置装备摆设接口

一、简介微信公家平台是腾讯公司在微信的根本上新增的功效模块,经由过程这一平台,小我和企业都能够打造一个微信的公家号,并完成和特定群体的笔墨、图片... >>概况

28
04月
在SAE上搭建最新wordpress的体例

装置SAE上的wordpress,建立利用挑选wordpress模板,装置后是3.4版本新建一个版本2,下载最新wordpress装置包并解... >>概况

14
03月
做一个小型企业网站须要多大空间才够用?

媒介: 筹办做网站,不晓得选用多大空间,是否是页面看起来广大,页面多就须要很大空间?咱们明天就一路来会商做一个小型企业网站须要多大空间才够用... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站