一个简单但功能比较完善的自动生成缩略图的函数,可以按需要对图片进行缩放、裁切、锁定宽或高、使用空白填充
以下为源码,比较简单,相信很容易看明白,记得打开 GD 库的支持哦:
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
|
<?php /** * 生成缩略图 * @param string 源图绝对完整地址{带文件名及后缀名} * @param string 目标图绝对完整地址{带文件名及后缀名} * @param int 缩略图宽{值设为0时目标高度不能为0,目标宽度为源图宽*(目标高度/源图高)} * @param int 缩略图高{值设为0时目标宽度不能为0,目标高度为源图高*(目标宽度/源图宽)} * @param int 是否裁切{宽,高必须非0} * @param int/float 缩放{0:不缩放, 0<this<1:缩放到相应比例(此时宽高限制和裁切均失效)} * @return boolean */ function img2thumb( $src_img , $dst_img , $width = 75, $height = 75, $cut = 0, $proportion = 0) { if (! is_file ( $src_img )) { return false; } $ot = fileext( $dst_img ); $otfunc = 'image' . ( $ot == 'jpg' ? 'jpeg' : $ot ); $srcinfo = getimagesize ( $src_img ); $src_w = $srcinfo [0]; $src_h = $srcinfo [1]; $type = strtolower ( substr (image_type_to_extension( $srcinfo [2]), 1)); $createfun = 'imagecreatefrom' . ( $type == 'jpg' ? 'jpeg' : $type ); $dst_h = $height ; $dst_w = $width ; $x = $y = 0; /** * 缩略图不超过源图尺寸(前提是宽或高只有一个) */ if (( $width > $src_w && $height > $src_h ) || ( $height > $src_h && $width == 0) || ( $width > $src_w && $height == 0)) { $proportion = 1; } if ( $width > $src_w ) { $dst_w = $width = $src_w ; } if ( $height > $src_h ) { $dst_h = $height = $src_h ; } if (! $width && ! $height && ! $proportion ) { return false; } if (! $proportion ) { if ( $cut == 0) { if ( $dst_w && $dst_h ) { if ( $dst_w / $src_w > $dst_h / $src_h ) { $dst_w = $src_w * ( $dst_h / $src_h ); $x = 0 - ( $dst_w - $width ) / 2; } else { $dst_h = $src_h * ( $dst_w / $src_w ); $y = 0 - ( $dst_h - $height ) / 2; } } else if ( $dst_w xor $dst_h ) { if ( $dst_w && ! $dst_h ) //有宽无高 { $propor = $dst_w / $src_w ; $height = $dst_h = $src_h * $propor ; } else if (! $dst_w && $dst_h ) //有高无宽 { $propor = $dst_h / $src_h ; $width = $dst_w = $src_w * $propor ; } } } else { if (! $dst_h ) //裁剪时无高 { $height = $dst_h = $dst_w ; } if (! $dst_w ) //裁剪时无宽 { $width = $dst_w = $dst_h ; } $propor = min(max( $dst_w / $src_w , $dst_h / $src_h ), 1); $dst_w = (int) round ( $src_w * $propor ); $dst_h = (int) round ( $src_h * $propor ); $x = ( $width - $dst_w ) / 2; $y = ( $height - $dst_h ) / 2; } } else { $proportion = min( $proportion , 1); $height = $dst_h = $src_h * $proportion ; $width = $dst_w = $src_w * $proportion ; } $src = $createfun ( $src_img ); $dst = imagecreatetruecolor( $width ? $width : $dst_w , $height ? $height : $dst_h ); $white = imagecolorallocate( $dst , 255, 255, 255); imagefill( $dst , 0, 0, $white ); if (function_exists( 'imagecopyresampled' )) { imagecopyresampled( $dst , $src , $x , $y , 0, 0, $dst_w , $dst_h , $src_w , $src_h ); } else { imagecopyresized( $dst , $src , $x , $y , 0, 0, $dst_w , $dst_h , $src_w , $src_h ); } $otfunc ( $dst , $dst_img ); imagedestroy( $dst ); imagedestroy( $src ); return true; } function fileext( $file ) { return pathinfo ( $file , PATHINFO_EXTENSION); } ?> |
使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php $src_img = "./test.jpg" ; //原图片完整路径和名称,带图片扩展名 $dst_img = "./test_thumb.jpg" ; //生成的缩略图存放的完整路径和名称 /* 生成宽300px,高200px的缩略图,不进行裁切,空白部分将会使用背景色填充 */ $stat = img2thumb( $src_img , $dst_img , $width = 300, $height = 200, $cut = 0, $proportion = 0); if ( $stat ){ echo 'Resize Image Success!<br />' ; echo '<img src="' . $dst_img . '" />' ; } else { echo 'Resize Image Fail!' ; } ?> |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:http://www.codetc.com/article-31-1.html