ThinkPHP打水印及设置水印位置的方法


Posted in PHP onOctober 14, 2016

本文实例讲述了ThinkPHP打水印及设置水印位置的方法。分享给大家供大家参考,具体如下:

最近在用Thinkphp的打水印的功能,发现只能打在左下角。 PHP打水印功还是很容易的,最要是用到

bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )

将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。

水印demo图:

ThinkPHP打水印及设置水印位置的方法

我需要把水印打到图片的真中间,查看Thinkphp代码。发现,作者居然是写死了,我只能做一个修改

/**
* 为图片添加水印
* @static public
* @param string $source 原文件名
* @param string $water 水印图片
* @param string $$savename 添加水印后的图片名
* @param string $postion 水印的具体位置 leftbottom rightbottom lefttop righttop center <新增>
* @param string $alpha 水印的透明度
* @return void
*/
static public function water($source, $water, $savename=null,$postion="center", $alpha=80) {
//检查文件是否存在
if (!file_exists($source) || !file_exists($water))
return false;
//图片信息
$sInfo = self::getImageInfo($source);
$wInfo = self::getImageInfo($water);
//如果图片小于水印图片,不生成图片
if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height']) return false; //建立图像 $sCreateFun = "imagecreatefrom" . $sInfo['type']; $sImage = $sCreateFun($source); $wCreateFun = "imagecreatefrom" . $wInfo['type']; $wImage = $wCreateFun($water); //设定图像的混色模式 imagealphablending($wImage, true); //图像位置,默认为右下角右对齐 $posArr = $this->WaterPostion($postion,$sInfo,$wInfo); //新增
  //生成混合图像
  imagecopymerge($sImage, $wImage, $posArr[0], $posArr[1], 0, 0, $wInfo['width'], $wInfo['height'], $alpha);
  //输出图像
  $ImageFun = 'Image' . $sInfo['type'];
 //如果没有给出保存文件名,默认为原图像名
 if (!$savename) {
   $savename = $source;
   @unlink($source);
  }
 //保存图像
  $ImageFun($sImage, $savename);
   imagedestroy($sImage);
 }
 private function WaterPostion($postion,$sInfo,$wInfo)
 {
   $posY = $sInfo["height"] - $wInfo["height"];
   $posX = $sInfo["width"] - $wInfo["width"];
  switch($postion)
 {
   case "rightbottom":
    return array($posX,$posY);
   break;
   case "leftbottom":
    return array($wInfo["width"],$posY);
   break;
   case "lefttop":
    return array($wInfo["width"],$wInfo["height"]);
   break;
   case "righttop":
    return array($posX,$wInfo["height"]);
   break;
   case "center":
    return array($posX/2,$posY/2);
  break;
  }
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php页面防重复提交方法总结
Nov 25 PHP
PHP缓冲区用法总结
Feb 14 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
php面向对象重点知识分享
Sep 27 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 #PHP
php版微信公众号接口实现发红包的方法
Oct 14 #PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 #PHP
php版银联支付接口开发简明教程
Oct 14 #PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 #PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 #PHP
thinkphp分页实现效果
Oct 13 #PHP
You might like
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
js实现微信聊天界面
2020/08/09 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
Python中的zip函数使用示例
2015/01/29 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
关于numpy数组轴的使用详解
2019/12/05 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
临床医学应届生求职信
2013/11/06 职场文书
百度吧主申请感言
2014/01/12 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
2014年组织部工作总结
2014/11/14 职场文书
银行招聘自荐信
2015/03/06 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
升学宴家长答谢词
2015/09/29 职场文书