图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)代码有点长,但不复杂。
01 | <?php |
02 | /************************************ |
03 | //函数: watermark($bigimg, $smallimg, $coord = 1) |
04 | //作用: 添加水印 |
05 | //参数: |
06 | $bigimg 必选。大图片--要加上水印的图片 |
07 | $smallimg 必选。小图片 |
08 | $coord 可选。水印在大图中的位置, |
09 | 1 左上角; 2 右上角; 3 右下角; 4 左下角; 5 中间 |
10 | //示例: watermark('datu.png', 'xiaotu.png', 3); //给datu.png打上水印,水印位置在右下角 |
11 | *************************************/ |
12 | function watermark( $bigimg , $smallimg , $coord = 1){ |
13 | //载入两张图片,并转成php识别的编码格式, |
14 | //等同于 imagecreate 函数,只不过这里创建的不是一个空图片。 |
15 | $bi = getimagesize ( $bigimg ); |
16 | switch ( $bi [2]){ |
17 | case 1: |
18 | $im1 = imagecreatefromgif( $bigimg ); break ; |
19 | case 2; |
20 | $im1 = imagecreatefromjpeg( $bigimg ); break ; |
21 | case 3; |
22 | $im1 = imagecreatefrompng( $bigimg ); break ; |
23 | } |
24 | $si = getimagesize ( $smallimg ); |
25 | switch ( $si [2]){ |
26 | case 1: |
27 | $im2 = imagecreatefromgif( $smallimg ); break ; |
28 | case 2; |
29 | $im2 = imagecreatefromjpeg( $smallimg ); break ; |
30 | case 3; |
31 | $im2 = imagecreatefrompng( $smallimg ); break ; |
32 | } |
33 | // 创建水印--原理:复制小图到大图上。这里注意坐标值的计算 |
34 | switch ( $coord ){ |
35 | case 1: |
36 | imagecopy ( $im1 , $im2 , 0, 0, 0, 0, $si [0], $si [1] ); break ; |
37 | case 2: |
38 | imagecopy ( $im1 , $im2 , $bi [0]- $si [0], 0, 0, 0, $si [0], $si [1] ); break ; |
39 | case 3: |
40 | imagecopy ( $im1 , $im2 , $bi [0]- $si [0], $bi [1]- $si [1], 0, 0, $si [0], $si [1] ); break ; |
41 | case 4: |
42 | imagecopy ( $im1 , $im2 , 0, $bi [1]- $si [1], 0, 0, $si [0], $si [1] ); break ; |
43 | case 5: |
44 | imagecopy ( $im1 , $im2 , ( $bi [0]- $si [0])/2, ( $bi [1]- $si [1])/2, 0, 0, $si [0], $si [1] ); break ; |
45 | } |
46 | //根据后缀名生成不同格式的图片文件 |
47 | switch ( $bi [2]){ |
48 | case 1: |
49 | imagegif( $im1 ); break ; |
50 | case 2; |
51 | imagejpeg( $im1 ); break ; |
52 | case 3; |
53 | imagepng( $im1 ); break ; |
54 | } |
55 | imagedestroy( $im1 ); |
56 | } |
57 | /************************************************ |
58 | //函数: thumbnail($srcimg, $multiple) |
59 | //作用: 生成一张缩略图 |
60 | //参数: |
61 | // $srcimg 必选。源图片文件名 |
62 | // $multiple 可选。缩略倍数,默认为2倍,即缩小为原来的1/2 |
63 | //注意: 只支持gif、jpg、png的格式图片。 |
64 | //示例: thumbnail('我的图片.jpg', 5); |
65 | *************************************************/ |
66 | function thumbnail( $srcimg , $multiple = 2){ |
67 | //载入图片并保存其信息到数组 |
68 | $srcimg_arr = getimagesize ( $srcimg ); |
69 | //计算缩略倍数 |
70 | $thumb_width = $srcimg_arr [0] / $multiple ; |
71 | $thumb_height = $srcimg_arr [1] / $multiple ; |
72 | //判断:要建立什么格式的图片(转成php识别的编码) |
73 | switch ( $srcimg_arr [2]){ |
74 | case 1: |
75 | $im = imagecreatefromgif( $srcimg ); break ; |
76 | case 2; |
77 | $im = imagecreatefromjpeg( $srcimg ); break ; |
78 | case 3; |
79 | $im = imagecreatefrompng( $srcimg ); break ; |
80 | } |
81 | //开始缩略操作 |
82 | $thumb = imagecreatetruecolor( $thumb_width , $thumb_height ); |
83 | imagecopyresized( $thumb , $im , 0, 0, 0 ,0, $thumb_width , $thumb_height , $srcimg_arr [0], $srcimg_arr [1]); |
84 | switch ( $srcimg_arr [2]){ |
85 | case 1: |
86 | imagegif( $thumb ); break ; |
87 | case 2; |
88 | imagejpeg( $thumb ); break ; |
89 | case 3; |
90 | imagepng( $thumb ); break ; |
91 | } |
92 | imagepng( $thumb ); |
93 | imagedestroy( $thumb ); |
94 | } |
95 | //测试 时不要同时使用这两个函数。 |
96 | //watermark('datu.png','xiaotu.png',5); |
97 | thumbnail( 'abc.png' ,3); |
98 | ?> |