本文实例讲述了thinkphp打水印及设置水印位置的方法。分享给大家供大家参考,具体如下:
最近在用thinkphp的打水印的功能,发现只能打在左下角。 php打水印功还是很容易的,最要是用到
将 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代码。发现,作者居然是写死了,我只能做一个修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/** * 为图片添加水印 * @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程序设计有所帮助。