封装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图片水印类
# PHP图片水印
# PHP水印类
# 基于PHP实现生成随机水印图片
# PHP实现随机生成水印图片功能
# 如何使用PHP给图片加水印
# PHP图片添加水印功能示例小结
# php图片添加水印例子
# PHP实现图片加水印功能
# 这两个
# 太大
# 不存在
# 贴上
# 是否能
# 具体内容
# 大家多多
# 是否存在
# png
# true
# char
# param
# function
# isRandName
# __construct
# path
# prefix
# file_exists
# postion
# image
相关文章:
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
制作旅游网站html,怎样注册旅游网站?
建站之星各版本价格是多少?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
如何选择域名并搭建高效网站?
定制建站如何定义?其核心优势是什么?
宿州网站制作公司兴策,安徽省低保查询网站?
如何在Golang中使用replace替换模块_指定本地或远程路径
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
python的本地网站制作,如何创建本地站点?
如何有效防御Web建站篡改攻击?
购物网站制作公司有哪些,哪个购物网站比较好?
,交易猫的商品怎么发布到网站上去?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
成都网站制作报价公司,成都工业用气开户费用?
小建面朝正北,A点实际方位是否存在偏差?
css网站制作参考文献有哪些,易聊怎么注册?
西安大型网站制作公司,西安招聘网站最好的是哪个?
如何选择建站程序?包含哪些必备功能与类型?
设计网站制作公司有哪些,制作网页教程?
活动邀请函制作网站有哪些,活动邀请函文案?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Android滚轮选择时间控件使用详解
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
重庆网站制作公司哪家好,重庆中考招生办官方网站?
临沂网站制作公司有哪些,临沂第四中学官网?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
招商网站制作流程,网站招商广告语?
建站之星后台管理:高效配置与模板优化提升用户体验
建站之星免费模板:自助建站系统与智能响应式一键生成
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何用AWS免费套餐快速搭建高效网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何用PHP快速搭建CMS系统?
建站主机系统SEO优化与智能配置核心关键词操作指南
外贸公司网站制作哪家好,maersk船公司官网?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
焦点电影公司作品,电影焦点结局是什么?
如何快速生成凡客建站的专业级图册?
潮流网站制作头像软件下载,适合母子的网名有哪些?
详解jQuery停止动画——stop()方法的使用
javascript中对象的定义、使用以及对象和原型链操作小结
北京网站制作公司哪家好一点,北京租房网站有哪些?
建站之星安装提示数据库无法连接如何解决?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
*请认真填写需求信息,我们会在24小时内与您取得联系。