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新手上路(六)
Oct 09 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
php快速查找数据库中恶意代码的方法
Apr 01 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
php中序列化与反序列化详解
Feb 13 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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文件操作实例总结
2016/09/27 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
详解python中的文件与目录操作
2017/07/11 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
学生处主任岗位职责
2013/12/01 职场文书
鼋头渚导游词
2015/02/05 职场文书
七一建党节慰问信
2015/02/14 职场文书
简历中的自我评价应该这样写!
2019/07/12 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python