php分析图片中水印的位置,关于ThinkPHP打水印及设置水印位置的分析

这篇文章主要介绍了ThinkPHP打水印及设置水印位置的方法,结合实例形式分析了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图:

cf4c0c94994f1aa9a3bb778c0b4e884a.png

我需要把水印打到图片的真中间,查看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;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为交换机命令_华为交换机常用命令

华为交换机常用命令&#xff1a;1、display current-configuration 显示当前配置2、display interface GigabitEthernet 1/1/4 显示接口信息3、display packet-filter interface GigabitEthernet 1/1/4 显示接口acl应用信息4、display acl all 显示所有acl设置 3900系列交换机5…

java中两种添加监听器的策略

/*第一种&#xff1a;将事件的处理委托给其他对象&#xff0c;下面的例子是委托给了MyListener&#xff08;implements ActionListener&#xff09;*/ 1 import java.applet.Applet;2 import java.awt.event.*;3 import java.awt.*;4 public class ChangeColor extends Applet{…

php dos命令用不了,windows下如何使用DOS命令强制复制文件

有的时候&#xff0c;我们可能需要替换某些目录下的一些文件&#xff0c;手动去一个个目录找的话&#xff0c;就会比较麻烦&#xff0c;这时候&#xff0c;就是我们程序员上场的时候了&#xff0c;程序虽然好写&#xff0c;但是dos命令并不是每个人都玩的转的&#xff0c;而且最…

java的栈图形演示

1 import java.awt.*;2 import javax.swing.*;3 import java.awt.event.*;4 /*5 指示发生了组件定义的动作的语义事件。当特定于组件的动作&#xff08;比如被按下&#xff09;发生时&#xff0c;由组件&#xff08;比如 Button&#xff09;生成此高级别事件。6 事件被传递给每…

python播放本地视频_python opencv 读取本地视频文件 修改ffmpeg的方法

Python opencv 读取视频的三种情况&#xff1a;情况一&#xff1a;通过摄像头采集视频情况二&#xff1a;通过本地视频文件获取视频情况三&#xff1a;通过摄像头录制视频&#xff0c;再读取录制的视频摄像头采集、本地视频文件的读取、写视频文件&#xff0c;网上都有代码。我…

kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题

这篇文章是针对2020年下载安装的kali系统碰到的关于 iptables开放22端口失败等一系列问题的解决办法&#xff0c;如果是其它系统&#xff0c;可以借鉴一下思路。各种报错&#xff1a;# sudo systemctl start iptablesFailed to start iptables.service: Unit iptables.service …

中缀试转后缀试及前缀试并计算其结果

1 /*2 参考大神nb的代码&#xff0c;感觉思路不错&#xff01;终于搞明白了&#xff01;一开始不明白在计算表达式的时候&#xff0c;利用栈到底做了什么&#xff01;现在感觉我们利用栈就是模拟我们书面上计算表达式&#xff0c;3 将优先级高的运算先计算出来&…

ros如何编译python文件_Python为ROS编写一个简单的发布者和订阅者

Python为ROS编写一个简单的发布者和订阅者1.创建工作空间1.1建立文件夹hello_rospy,再在该目录下建立子目录src,并创建工作空间mkdir -p ~/hello_rospy/srccd ~/hello_rospy/srccatkin_init_workspace1.2 编译cd ~/hello_rospy/catkin_make1.3设置运行环境echo "source ~/…

php整站防注入程序,php通用防注入程序 推荐

function jk1986_checksql(){$bad_str "and|select|update|‘|delete|insert|*";$bad_Array explode("|",$bad_str);/** 过滤Get参数 **/foreach ($bad_Array as $bad_a){foreach ($_GET as $g){if (substr_count(strtolower($g),$bad_a) > 0){echo &…

表达式建树

//用数组实现树 1 #include<iostream> 2 #include<ctype.h>3 #include<cstring>4 #define N 100005 #define optd 16 #define optr 27 using namespace std;8 int treeL[N], treeR[N];9 class node 10 { 11 public: 12 int flag;//区分当前节点是操作符还…

python label标签的作用_label标签的作用是什么?

label标签的作用是为鼠标用户改进了可用性&#xff0c;当用户点击【】标签中的文本时&#xff0c;浏览器就会自动将焦点转到和该标签相关联的控件上。label标签的作用&#xff1a;一、标签定义及用法在html中&#xff0c;标签通常和标签一起使用&#xff0c;标签为input元素定义…

java异常自定义返回信息,Spring Boot 如何自定义返回错误码错误信息

说明在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息&#xff0c;而不是统一的而不是统一的下面这种格式返回到调用端INTERNAL_SERVER_ERROR(500, "Internal Server Error"),下面我们来看看如何将我们自定义的错误码和错误信息返回到调用端。1 自定…

文件管理系统_Python学习第170节--Linux文件管理系统实际操作和具体介绍

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】上节我们简单了解了Linux文件管理系统&#xff0c;现在我们学习它的实际操作。首先我们解释下~和/的区别。~之前我们介绍过&#xff0c;我们说~是Linux系统的根目录&#xff0c;其实这个说法是不准确的&#xf…

redis 计数器 java_Redis 的 8 大应用场景!

之前讲过Redis的介绍&#xff0c;及使用Redis带来的优势&#xff0c;这章整理了一下Redis的应用场景&#xff0c;也是非常重要的&#xff0c;学不学得好&#xff0c;能正常落地是关键。下面一一来分析下Redis的应用场景都有哪些。1、缓存缓存现在几乎是所有中大型网站都在用的必…

sql中in与php数组,格式化SQL“IN”子句的PHP数组

我正在尝试在数据库中查询“product_id”包含在产品ID数组中的记录.该数组是多选输入(< select>)的结果,如下所示&#xff1a;$clients Array ([0] > 80000016-1302638679[1] > 8000003B-1329924004)我想将该数组传递给sql语句的“IN”子句,例如&#xff1a;$sql …

汇编汉诺塔

1 .3862 .model flat3 .stack 40964 include io.h5 ExitProcess proto near32 stdcall, ExitCode:dword6 cr equ 0dh7 lf equ 0ah8 .data9 string1 byte "请输入汉诺塔数&#xff1a;", cr, lf 10 strNum byte 10 dup(?) 11 result byte 10 dup( ) 12 byte c…

oracle精度说明符1~38_Oracle 错误代码总结及解决方案

ORA-00001&#xff1a;违反唯一约束条件(主键错误)ORA-00028&#xff1a;无法连接数据库进程ORA-00900&#xff1a;无效sql语句ORA-00904&#xff1a;字段名写错或是建表时最后一个字段有逗号ORA-00907&#xff1a;缺少右括号ORA-00911&#xff1a;无效字符ORA-00917&#xff1…

opencv为matlab,OpenCV与matlab部分函数的对应关系(转)

2、matlab中的zeros函数相当于OpenCV中的cvSetZero函数。3、matlab中的两矩阵点乘 .*相当于OpenCV中的cvMul函数。4、matlab中的两矩阵点除 ./相当于OpenCV中的cvDiv函数。5、matlab中的两矩阵相加 相当于OpenCV中的cvAdd函数。6、matlab中的两矩阵相减 -相当于OpenCV中的cvSub…

预测分析算法的设计与实现_基于LD(编辑距离算法)的单词速记数据库分析设计与实现...

2020-21-1学期《最新数据库管理系统》结课作业展示。作者&#xff1a;牟伦利 褚四浩 陈思琴 曹鹏飞(电商11802)分工陈思琴&#xff1a;系统需求分析 、系统相关算法分析和ER图曹鹏飞&#xff1a;系统数据字典 、业务流程图、数据流程图和PPT制作牟伦利&#xff1a;存储过程、触…

参考文献要不要首行缩进_参考文献格式要求(2015-2016-2)

1参考文献统一使用下列格式一、参考文献构成参考文献分为两个部分&#xff1a;正文部分的夹注和文后参考文献处的参考文献条目。1.正文部分的夹注(作者的姓页码)正文引用了他人的观点后&#xff0c;在后面紧靠引用处给出夹注。例如&#xff1a;The contemporary text linguisti…