本文实例讲述了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程序设计有所帮助。