本文实例讲述了PHP实现图片的等比缩放和Logo水印功能。分享给大家供大家参考,具体如下:
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
|
/** * 等比缩放函数(以保存的方式实现) * @param string $picname 被缩放的处理图片源 * @param int $maxx 缩放后图片的最大宽度 * @param int $maxy 缩放后图片的最大高度 * @param string $pre 缩放后图片名的前缀名 * @return String 返回后的图片名称(带路径),如a.jpg=>s_a.jpg */ function imageUpdateSize( $picname , $maxx =100, $maxy =100, $pre = "s_" ){ $info = getimageSize ( $picname ); //获取图片的基本信息 $w = $info [0]; //获取宽度 $h = $info [1]; //获取高度 //获取图片的类型并为此创建对应图片资源 switch ( $info [2]){ case 1: //gif $im = imagecreatefromgif( $picname ); break ; case 2: //jpg $im = imagecreatefromjpeg( $picname ); break ; case 3: //png $im = imagecreatefrompng( $picname ); break ; default : die ( "图片类型错误!" ); } //计算缩放比例 if (( $maxx / $w )>( $maxy / $h )){ $b = $maxy / $h ; } else { $b = $maxx / $w ; } //计算出缩放后的尺寸 $nw = floor ( $w * $b ); $nh = floor ( $h * $b ); //创建一个新的图像源(目标图像) $nim = imagecreatetruecolor( $nw , $nh ); //执行等比缩放 imagecopyresampled( $nim , $im ,0,0,0,0, $nw , $nh , $w , $h ); //输出图像(根据源图像的类型,输出为对应的类型) $picinfo = pathinfo ( $picname ); //解析源图像的名字和路径信息 $newpicname = $picinfo [ "dirname" ]. "/" . $pre . $picinfo [ "basename" ]; switch ( $info [2]){ case 1: imagegif( $nim , $newpicname ); break ; case 2: imagejpeg( $nim , $newpicname ); break ; case 3: imagepng( $nim , $newpicname ); break ; } //释放图片资源 imagedestroy( $im ); imagedestroy( $nim ); //返回结果 return $newpicname ; } //测试: //echo imageUpdateSize("./images/bg.jpg",200,200,"ss_"); // ./images/s_bg.jpg |
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
|
/** * 为一张图片添加上一个logo图片水印(以保存的方式实现) * @param string $picname 被处理图片源 * @param string $logo 水印图片 * @param string $pre 处理后图片名的前缀名 * @return String 返回后的图片名称(带路径),如a.jpg=>n_a.jpg */ function imageUpdateLogo( $picname , $logo , $pre = "n_" ){ $picnameinfo = getimageSize ( $picname ); //获取图片源的基本信息 $logoinfo = getimageSize ( $logo ); //获取logo图片的基本信息 //var_dump($logoinfo); //根据图片类型创建出对应的图片源 switch ( $picnameinfo [2]){ case 1: //gif $im = imagecreatefromgif( $picname ); break ; case 2: //jpg $im = imagecreatefromjpeg( $picname ); break ; case 3: //png $im = imagecreatefrompng( $picname ); break ; default : die ( "图片类型错误!" ); } //根据logo图片类型创建出对应的图片源 switch ( $logoinfo [2]){ case 1: //gif $logoim = imagecreatefromgif( $logo ); break ; case 2: //jpg $logoim = imagecreatefromjpeg( $logo ); break ; case 3: //png $logoim = imagecreatefrompng( $logo ); break ; default : die ( "logo图片类型错误!" ); } //执行图片水印处理 imagecopyresampled( $im , $logoim , $picnameinfo [0]- $logoinfo [0], $picnameinfo [1]- $logoinfo [1],0,0, $logoinfo [0], $logoinfo [1], $logoinfo [0], $logoinfo [1]); //输出图像(根据源图像的类型,输出为对应的类型) $picinfo = pathinfo ( $picname ); //解析源图像的名字和路径信息 $newpicname = $picinfo [ "dirname" ]. "/" . $pre . $picinfo [ "basename" ]; switch ( $picnameinfo [2]){ case 1: imagegif( $im , $newpicname ); break ; case 2: imagejpeg( $im , $newpicname ); break ; case 3: imagepng( $im , $newpicname ); break ; } //释放图片资源 imagedestroy( $im ); imagedestroy( $logoim ); //返回结果 return $newpicname ; } //测试 echo imageUpdateLogo( "./images/bg2.jpg" , "./images/s_1.png" ); |
希望本文所述对大家PHP程序设计有所帮助。