封装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;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!