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 相关文章推荐
PHP DataGrid 实现代码
Aug 12 PHP
php 过滤器实现代码
Aug 09 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
php制作的简单验证码识别代码
Jan 26 PHP
简单谈谈 php 文件锁
Feb 19 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 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 数组二分法查找函数代码
2010/02/16 PHP
第四章 php数学运算
2011/12/30 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
如何在python中使用selenium的示例
2017/12/26 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
工程部经理岗位职责
2013/12/08 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python