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实现网站插件机制的方法
Nov 10 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
php字符串操作常见问题小结
Oct 11 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 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
层叠菜单的动态生成
2006/10/09 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
JS在Array数组中按指定位置删除或添加元素对象方法示例
2019/11/19 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
python 不关闭控制台的实现方法
2011/10/23 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
深入解析Python中的urllib2模块
2015/11/13 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
opencv 阈值分割的具体使用
2020/07/08 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
秋季运动会广播稿
2014/02/22 职场文书
交通事故协议书范文
2014/04/16 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
场地使用证明模板
2014/10/25 职场文书
django上传文件的三种方式
2021/04/29 Python
超详细Python解释器新手安装教程
2021/05/10 Python
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS