1. [代碼]php生成縮略圖
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
123
124
<?php
/**
*
生成縮略圖
*
@author [email protected]
*
@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;
}
2. [代碼]補充代碼 跳至 [1] [2] [3] [全屏預覽]
1
2
3
4
function
fileext(
$file
)
{
return
pathinfo
(
$file
,
PATHINFO_EXTENSION);
}
3. [代碼]函數的使用demo(林夕9527提供)
1
2
3
4
5
6
7
8
9
$src_img
=
"./ROSI_050_002.JPG"
;
$dst_img
=
"./ROSI_050_002_thumb.jpg"
;
$stat
= img2thumb(
$src_img
,
$dst_img
,
$width
= 200,
$height
= 300,
$cut
= 0,
$proportion
= 0);
if
(
$stat
){
echo
'Resize Image Success!<br />'
;
echo
'<img src="'
.
$dst_img
.
'"
/>'
;
}
else
{
echo
'Resize Image Fail!'
;
}
1. [代碼]php生成縮略圖
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
123
124
|
<?php /** *
生成縮略圖 *
@author [email protected] *
@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; } |
2. [代碼]補充代碼 跳至 [1] [2] [3] [全屏預覽]
1
2
3
4
|
function
fileext( $file ) { return
pathinfo ( $file ,
PATHINFO_EXTENSION); } |
3. [代碼]函數的使用demo(林夕9527提供)
1
2
3
4
5
6
7
8
9
|
$src_img
= "./ROSI_050_002.JPG" ; $dst_img
= "./ROSI_050_002_thumb.jpg" ; $stat
= img2thumb( $src_img ,
$dst_img ,
$width
= 200, $height
= 300, $cut
= 0, $proportion
= 0); if ( $stat ){ echo
'Resize Image Success!<br />' ; echo
'<img src="' . $dst_img . '"
/>' ;
} else { echo
'Resize Image Fail!' ;
} |