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);
}
评论0
最新资源