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
|
/** * 图片缩放函数(可设置高度固定,宽度固定或者最大宽高,支持gif/jpg/png三种类型) * Author : Specs * * @param string $source_path 源图片 * @param int $target_width 目标宽度 * @param int $target_height 目标高度 * @param string $fixed_orig 锁定宽高(可选参数 width、height或者空值) * @return string */ function myImageResize( $source_path , $target_width = 200, $target_height = 200, $fixed_orig = '' ){ $source_info = getimagesize ( $source_path ); $source_width = $source_info [0]; $source_height = $source_info [1]; $source_mime = $source_info [ 'mime' ]; $ratio_orig = $source_width / $source_height ; if ( $fixed_orig == 'width' ){ //宽度固定 $target_height = $target_width / $ratio_orig ; } elseif ( $fixed_orig == 'height' ){ //高度固定 $target_width = $target_height * $ratio_orig ; } else { //最大宽或最大高 if ( $target_width / $target_height > $ratio_orig ){ $target_width = $target_height * $ratio_orig ; } else { $target_height = $target_width / $ratio_orig ; } } switch ( $source_mime ){ case 'image/gif' : $source_image = imagecreatefromgif( $source_path ); break ; case 'image/jpeg' : $source_image = imagecreatefromjpeg( $source_path ); break ; case 'image/png' : $source_image = imagecreatefrompng( $source_path ); break ; default : return false; break ; } $target_image = imagecreatetruecolor( $target_width , $target_height ); imagecopyresampled( $target_image , $source_image , 0, 0, 0, 0, $target_width , $target_height , $source_width , $source_height ); //header('Content-type: image/jpeg'); $imgArr = explode ( '.' , $source_path ); $target_path = $imgArr [0] . '_new.' . $imgArr [1]; imagejpeg( $target_image , $target_path , 100); } |
用法:
- myImageResize($filename, 200, 200); //最大宽高
- myImageResize($filename, 200, 200, 'width'); //宽度固定
- myImageResize($filename, 200, 200, 'height'); //高度固定
剪切图片为固定大小:
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
|
function imagecropper( $source_path , $target_width , $target_height ){ $source_info = getimagesize ( $source_path ); $source_width = $source_info [0]; $source_height = $source_info [1]; $source_mime = $source_info [ 'mime' ]; $source_ratio = $source_height / $source_width ; $target_ratio = $target_height / $target_width ; // 源图过高 if ( $source_ratio > $target_ratio ){ $cropped_width = $source_width ; $cropped_height = $source_width * $target_ratio ; $source_x = 0; $source_y = ( $source_height - $cropped_height ) / 2; } elseif ( $source_ratio < $target_ratio ){ // 源图过宽 $cropped_width = $source_height / $target_ratio ; $cropped_height = $source_height ; $source_x = ( $source_width - $cropped_width ) / 2; $source_y = 0; } else { // 源图适中 $cropped_width = $source_width ; $cropped_height = $source_height ; $source_x = 0; $source_y = 0; } switch ( $source_mime ){ case 'image/gif' : $source_image = imagecreatefromgif( $source_path ); break ; case 'image/jpeg' : $source_image = imagecreatefromjpeg( $source_path ); break ; case 'image/png' : $source_image = imagecreatefrompng( $source_path ); break ; default : return false; break ; } $target_image = imagecreatetruecolor( $target_width , $target_height ); $cropped_image = imagecreatetruecolor( $cropped_width , $cropped_height ); // 裁剪 imagecopy( $cropped_image , $source_image , 0, 0, $source_x , $source_y , $cropped_width , $cropped_height ); // 缩放 imagecopyresampled( $target_image , $cropped_image , 0, 0, 0, 0, $target_width , $target_height , $cropped_width , $cropped_height ); $dotpos = strrpos ( $source_path , '.' ); $imgName = substr ( $source_path , 0, $dotpos ); $suffix = substr ( $source_path , $dotpos ); $imgNew = $imgName . '_small' . $suffix ; imagejpeg( $target_image , $imgNew , 100); imagedestroy( $source_image ); imagedestroy( $target_image ); imagedestroy( $cropped_image ); } |