|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。 明天是六一儿童节,嘿嘿,和人人分享下在PHP网站开辟中常常用到的给图片添加水印的函数源码,由David编写,亲身测试经由过程,撑持以图片和文字两种体例给图片添加水印。图片撑持GIF,PNG,JPG三种格局,水印图片撑持PNG和GIF。闲话少说,贴出我的PHP图片水印函数。
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{
$srcInfo = @getimagesize($imgSrc);
$srcImg_w = $srcInfo[0];
$srcImg_h = $srcInfo[1];
switch ($srcInfo[2])
{
case 1:
$srcim =imagecreatefromgif($imgSrc);
break;
case 2:
$srcim =imagecreatefromjpeg($imgSrc);
break;
case 3:
$srcim =imagecreatefrompng($imgSrc);
break;
default:
die("不撑持的图片文件类型");
exit;
}
if(!strcmp($markType,"img"))
{
if(!file_exists($markImg) empty($markImg))
{
return;
}
$markImgInfo = @getimagesize($markImg);
$markImg_w = $markImgInfo[0];
$markImg_h = $markImgInfo[1];
if($srcImg_w < $markImg_w $srcImg_h < $markImg_h)
{
return;
}
switch ($markImgInfo[2])
{
case 1:
$markim =imagecreatefromgif($markImg);
break;
case 2:
$markim =imagecreatefromjpeg($markImg);
break;
case 3:
$markim =imagecreatefrompng($markImg);
break;
default:
die("不撑持的水印图片文件类型");
exit;
}
$logow = $markImg_w;
$logoh = $markImg_h;
}
if(!strcmp($markType,"text"))
{
$fontSize = 16;
if(!empty($markText))
{
if(!file_exists($fontType))
{
return;
}
}
else {
return;
}
$box = @imagettfbbox($fontSize, 0, $fontType,$markText);
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
}
if($markPos == 0)
{
$markPos = rand(1, 9);
}
switch($markPos)
{
case 1:
$x = +5;
$y = +5;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 5;
$y = +15;
break;
case 4:
$x = +5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 5:
$x = ($srcImg_w - $logow) / 2;
$y = ($srcImg_h - $logoh) / 2;
break;
case 6:
$x = $srcImg_w - $logow - 5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 7:
$x = +5;
$y = $srcImg_h - $logoh - 5;
break;
case 8:
$x = ($srcImg_w - $logow) / 2;
$y = $srcImg_h - $logoh - 5;
break;
case 9:
$x = $srcImg_w - $logow - 5;
$y = $srcImg_h - $logoh -5;
break;
default:
die("此地位不撑持");
exit;
}
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
if(!strcmp($markType,"img"))
{
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
imagedestroy($markim);
}
if(!strcmp($markType,"text"))
{
$rgb = explode(',', $TextColor);
$color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
}
switch ($srcInfo[2])
{
case 1:
imagegif($dst_img, $imgSrc);
break;
case 2:
imagejpeg($dst_img, $imgSrc);
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("不撑持的水印图片文件类型");
exit;
}
imagedestroy($dst_img);
imagedestroy($srcim);
} 参数申明:
$imgSrc:方针图片,可带绝对目次地址,
$markImg:水印图片,可带绝对目次地址,撑持PNG和GIF两种格局,如水印图片在履行文件mark目次下,可写成:mark/mark.gif
$markText:给图片添加的水印文字
$TextColor:水印文字的字体色彩
$markPos:图片水印添加的地位,取值局限:0~9
0:随机地位,在1~8之间随机拔取一个地位
1:顶部居左 2:顶部居中 3:顶部居右 4:右边居中
5:图片中间 6:右侧居中 7:底部居左 8:底部居中 9:底部居右
$fontType:详细的字体库,可带绝对目次地址
$markType:图片添加水印的体例,img代表以图片体例,text代表以文字体例添加水印
代码正文:
第4~6行:获得方针图片的宽度和高度
第8~22行:依据图片类型挪用分歧的函数,取得操作图象标识符
GetImageSize函数常识点:GetImageSize不需求装置 GD度便可利用,其前往值数组有四个元素。索引值0是图片高度。索引值1是图片的宽度。索引值2是图片的文件格局,其值1为GIF格局、2为JPEG/JPG格局、3为PNG格局。索引值3为图片的高与宽字符串,height=xxx width=yyy。前往的图片宽度和高度单元都是像素(pixel)
第24~58行:中选择图片体例给方针图片添加水印时,获得水印图片的宽度和高度,凡是情形都是网站的logo。假如方针图片比水印图片宽度或高度小或水印图片不存在,则跳出这个函数。
return语句常识点:直接return 暗示甚么都不前往,直接停止这个函数。也能够了解成前往 NULL。
第60~77行:中选择文字体例给方针图片添加水印时,起首设定水印文字的巨细,默许我设置为16px,你可以依据需求自行调剂字体巨细。假如字体文件不存在,跳出函数,最初经由过程imagettfbbox函数取得此设定格局的文字的虚拟长宽。
imagettfbbox函数常识点:此函数前往一个含有8个单位的数组暗示文本外框的四个角,索引值寄义:0代表左下角 X 地位,1代表坐下角 Y 地位,2代表右下角 X 地位,3代表右下角 Y 地位,4代表右上角 X 地位,5代表右上角 Y 地位,6代表左上角 X 地位,7代表左上角 Y 地位。此函数同时需求GD 库和FreeType库的撑持
max函数前往参数中数值最大的值。
第79~125行:依据设定的图片水印地位盘算详细坐标值,你可以依据后果详细细化水印的地位。
第127~129行:新建一个和方针图片巨细分歧的图片。
注:因为imagecreatetruecolor函数局限的是一个黑色图片,所以假如你的方针图片是通明的,则生成的新图将不会是通明色。
第131~162行:依据图片或文字体例,终究生成添加了水印的图片。
挪用申明:
以函数挪用体例挪用便可,固然你也能够以类的体例封装,或你也能够依据需求将此函数进一步细分模块也能够。固然你如今如许用也是没有任何成绩的,我已测试过,请宁神利用。
其他申明:
因为imagettftext和imagettfbbox函数需求GD库和FreeType库的撑持,假如你的运转情况不撑持GD库和FreeType库则文字体例就没法完成,你可以用imagestring函数完成给图片添加文字水印,同时设定下text体例下的$logow和$logoh值便可。
imagejpeg函数也能够设置分解的图片质量。
PHP图片加水印函数思绪总结:
起首盘算方针图片、水印图片和文字的宽度和高度,在依据详细地位盘算终究水印呈现的地位信息,即X和Y值。最初分解图片,新的图片就添加了水印。
注:PHP网站开辟教程-leapsoul.cn版权一切,转载时请以链接模式注明原始出处及本声明,感谢。
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。 |
|