这篇文章主要介绍了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图:
我需要把水印打到图片的真中间,查看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获取客户端ip
关于thinkphp框架实现数据添加和显示的功能方法
thinkphp模板输出display
以上就是关于thinkphp打水印及设置水印位置的分析的详细内容。