一个简单但功能比较完善的自动生成缩略图的函数,可以按需要对图片进行缩放、裁切、锁定宽或高、使用空白填充
以下为源码,比较简单,相信很容易看明白,记得打开 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