1 <?php
2 resizeImage('qm.jpg','up/1.jpg',93,94);
3 /**
4 * 图片生成缩略图
5 *
6 * @param string $img 预缩略的图片
7 * @param string $thum_path 生成缩略图路径
8 * @param int $max_w 缩略图最大宽度 px
9 * @param int $max_h 缩略图最大高度 px
10 * @return unknown
11 */
12 function resizeImage($img, $thum_path, $max_w, $max_h) {
13 if (!in_array(getFileSuffix($thum_path), array('jpg', 'png', 'jpeg', 'gif'))) {
14 return false;
15 }
16 if (!function_exists('ImageCreate')) {
17 return false;
18 }
19
20 $size = chImageSize($img, $max_w, $max_h);
21 $newwidth = $size['w'];
22 $newheight = $size['h'];
23 $w = $size['rc_w'];
24 $h = $size['rc_h'];
25 if ($w <= $max_w && $h <= $max_h) {
26 return false;
27 }
28 return imageCropAndResize($img, $thum_path, 0, 0, 0, 0, $newwidth, $newheight, $w, $h);
29 }
30
31 /**
32 * 裁剪、缩放图片
33 *
34 * @param string $src_image 原始图
35 * @param string $dst_path 裁剪后的图片保存路径
36 * @param int $dst_x 新图坐标x
37 * @param int $dst_y 新图坐标y
38 * @param int $src_x 原图坐标x
39 * @param int $src_y 原图坐标y
40 * @param int $dst_w 新图宽度
41 * @param int $dst_h 新图高度
42 * @param int $src_w 原图宽度
43 * @param int $src_h 原图高度
44 */
45 function imageCropAndResize($src_image, $dst_path, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
46 if (function_exists('imagecreatefromstring')) {
47 $src_img = imagecreatefromstring(file_get_contents($src_image));
48 } else {
49 return false;
50 }
51
52 if (function_exists('imagecopyresampled')) {
53 $new_img = imagecreatetruecolor($dst_w, $dst_h);
54 imagecopyresampled($new_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
55 } elseif (function_exists('imagecopyresized')) {
56 $new_img = imagecreate($dst_w, $dst_h);
57 imagecopyresized($new_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
58 } else {
59 return false;
60 }
61
62 switch (getFileSuffix($dst_path)) {
63 case 'png':
64 if (function_exists('imagepng') && imagepng($new_img, $dst_path)) {
65 ImageDestroy($new_img);
66 return true;
67 } else {
68 return false;
69 }
70 break;
71 case 'jpg':
72 default:
73 if (function_exists('imagejpeg') && imagejpeg($new_img, $dst_path)) {
74 ImageDestroy($new_img);
75 return true;
76 } else {
77 return false;
78 }
79 break;
80 case 'gif':
81 if (function_exists('imagegif') && imagegif($new_img, $dst_path)) {
82 ImageDestroy($new_img);
83 return true;
84 } else {
85 return false;
86 }
87 break;
88 }
89 }
90
91 /**
92 * 按比例计算图片缩放尺寸
93 *
94 * @param string $img 图片路径
95 * @param int $max_w 最大缩放宽
96 * @param int $max_h 最大缩放高
97 * @return array
98 */
99 function chImageSize($img, $max_w, $max_h) {
100 $size = @getimagesize($img);
101 $w = $size[0];
102 $h = $size[1];
103 //计算缩放比例
104 @$w_ratio = $max_w / $w;
105 @$h_ratio = $max_h / $h;
106 //决定处理后的图片宽和高
107 if (($w <= $max_w) && ($h <= $max_h)) {
108 $tn['w'] = $w;
109 $tn['h'] = $h;
110 } else if (($w_ratio * $h) < $max_h) {
111 $tn['h'] = ceil($w_ratio * $h);
112 $tn['w'] = $max_w;
113 } else {
114 $tn['w'] = ceil($h_ratio * $w);
115 $tn['h'] = $max_h;
116 }
117 $tn['rc_w'] = $w;
118 $tn['rc_h'] = $h;
119 return $tn;
120 }
121
122
123 /**
124 * 获取文件名后缀
125 */
126 function getFileSuffix($fileName) {
127 return strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
128 }
129
130 ?>