php 水印位置,ThinkPHP打水印及设置水印位置的方法
本文实例讲述了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代码。发现,作者居然是写死了,我只能做一个修改
/**
* 为图片添加水印
* @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 水印位置,ThinkPHP打水印及设置水印位置的方法相关推荐
- php分析图片中水印的位置,thinkphp添加图片、文字水印 自定义位置等
只添加文字水印 //生成带水印的图片 $image = new \Think\Image(); //定义位置 $path="./Upload/water/".$time." ...
- php当前栏目位置,thinkphp获取栏目和文章当前位置的方法,_PHP教程
thinkphp获取栏目和文章当前位置的方法, 本文实例讲述了thinkphp获取栏目和文章当前位置的方法.分享给大家供大家参考.具体实现方法如下: 今天把博客一些细节完善了一下,其中修改了一下栏目页 ...
- 【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )
文章目录 一.背景位置 1.语法说明 2.注意事项 二.背景位置-方位值设置 1.效果展示 2.完整代码示例 一.背景位置 1.语法说明 如果 盒子的大小 大于 背景图片的大小 , 默认的 图片 位置 ...
- php分析图片中水印的位置,关于ThinkPHP打水印及设置水印位置的分析
这篇文章主要介绍了ThinkPHP打水印及设置水印位置的方法,结合实例形式分析了thinkPHP打印与设置水印的相关操作步骤与具体实现技巧,需要的朋友可以参考下 本文实例讲述了ThinkPHP打水印及 ...
- Java使用POI为Excel打水印,调整列宽并设置Excel只读
武林游戏 2017-05-02 11:15 本文介绍在Java语言环境下,使用POI为Excel打水印的解决方案,具体的代码编写以及相关的注意事项. 需求描述: 要求通过系统下载的Excel都带上公司 ...
- Springboot使用itext及documents4j操作pdf(word转pdf、pdf加水印(文字或图片,可指定位置)、pdf加密(打开密码,编辑密码))
pom.xml引入 <!-- pdf文档生成 --><dependency><groupId>com.documents4j</groupId>< ...
- word文字铺满页面_Word 2010文档中让水印铺满整个页面的设置方法
在Word 2010中,通过简单的鼠标单击即可为文档添加水印,但这样只能在每一个文档页面内添加一个水印,这个在前面的文章已经有所介绍,具体请见:Word文档添加内置水印.个性化图片及文字水印的方法,但 ...
- flink 不设置水印_区分理解Flink水印延迟与窗口允许延迟的概念
link 在开窗处理事件时间(Event Time) 数据时,可设置水印延迟以及设置窗口允许延迟(allowedLateness)以保证数据的完整性.这两者因都是设置延迟时间所以刚接触时容易混淆.本文 ...
- word加水印铺满java,Word 2010文档中让水印铺满整个页面的设置方法
在Word 2010中,通过简单的鼠标单击即可为文档添加水印,但这样只能在每一个文档页面内添加一个水印,这个在前面的文章已经有所介绍,具体请见:Word文档添加内置水印.个性化图片及文字水印的方法,但 ...
最新文章
- 二、Silverlight中使用MVVM(二)——提高
- 两种写法的效果一样,那么到底哪一种更好呢?
- win7设置开机后自动锁定计算机,Win7系统锁定计算机怎么设置 win7系统自动锁定...
- Python/WSGI 应用快速入门--转
- Go全局变量syntax error: non-declaration statement outside function bodygo
- java修改hidden_Java ColumnConfig.setHidden方法代码示例
- Popupwin结合Timer实现定时弹出消息提示
- Hibernate 笔记 缓存
- halcon使用直线标定板,标定相机内参代码
- navigator.geolocation的应用 - 将定位信息显示在百度地图上
- Java核心类库篇5——异常
- matlab没有找到图形用户界面,MATLAB中不能设计图形用户界面。
- 【hue】 hue+sentry界面没有添加角色的按钮
- rpc之使用httpserver实现tpc
- 孙鑫VC学习笔记:第十六讲 (二) 利用关键代码段实现线程间的同步
- 批处理获取网卡名称(附修改IP、网关、DNS脚本)
- 软件安装 | 神器VAX Patch VA_X.DLL 安装位置的问题 for VS2008 , VS2010 , VS2011
- Quartz配置RMI设置-006
- 小组赛,每个小组有5支队伍,互相之间打单循环赛,胜一场3分,平一场1分,输一场不得分,小组前三名出线。平分抽签。问一个队最少拿()分就有理论上的出线希望
- C++视频教程资源链接合集
热门文章
- 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪
- 计算机组成原理--动态链接
- 百度前端学院_小薇课堂_task2
- 【解决Windows】电脑桌面文件卡顿变白问题
- 网络编程懒人入门(十一):一文读懂什么是IPv6
- Istio1.12.1 Sidecar注入配置
- 2022天梯赛热身赛 浪漫侧影(什么原题)
- 酷狗社招面试 java_2019前端面试社招经验分享(网易,酷狗)
- 共享单车管理系统_多场景布局,才是共享充电宝赢得用户的关键
- 联想固体硬盘检查软件_固体。 软件设计原理