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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
Thinkphp无限级分类代码
Nov 11 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
PHP数组操作简单案例分析
Oct 15 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
PHP长连接实现与使用方法详解
Feb 11 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php 一元分词算法
2009/11/30 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
python交互式图形编程实例(三)
2017/11/17 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python字典的值可以修改吗
2020/06/29 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
HTML5等待加载动画效果
2017/07/27 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
编辑找工作求职信分享
2014/01/03 职场文书
安全口号大全
2014/06/21 职场文书
颐和园导游词400字
2015/01/30 职场文书
资料员岗位职责范本
2015/04/13 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
安全生产标语口号
2015/12/26 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis