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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
php discuz 主题表和回帖表的设计
Mar 13 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
php调用shell的方法
Nov 05 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
php7下的filesize函数
2019/09/30 PHP
javascript String 对象
2008/04/25 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
PHP实现发送和接收JSON请求
2018/06/07 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
全球虚拟主机商:HostGator
2017/02/06 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
宣传保护环境的公益广告词
2014/03/13 职场文书
《荷花》教学反思
2014/04/16 职场文书
python之json文件转xml文件案例讲解
2021/08/07 Python