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 相关文章推荐
php4的session功能评述(三)
Oct 09 PHP
我的论坛源代码(四)
Oct 09 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
PHP中的替代语法简介
Aug 22 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
Laravel下生成验证码的类
Nov 15 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
Oct 15 PHP
Laravel实现批量更新多条数据
Apr 06 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/09/01 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
python实现的简单窗口倒计时界面实例
2015/05/05 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python后台开发Django会话控制的实现
2019/04/15 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
社区中秋节活动方案
2014/01/29 职场文书
电大本科自我鉴定
2014/02/05 职场文书
保护环境建议书300字
2014/05/13 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
检讨书模板大全
2015/05/07 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python
React自定义hook的方法
2022/06/25 Javascript