PHP图片水印类的封装
程序员文章站
2024-03-11 14:46:37
封装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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 几种JAVA细粒度锁的实现方式
下一篇: 基于Java编写串口通信工具