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 );
}
|