仅附上关键代码,修改了Image.php中的cut方法,供各位参考
/**
* 切割图片
+----------------------------------------------------------
* @static
* @access public
* @edit by yangjs 20150721
+----------------------------------------------------------
* @param string $image 原图
* @param string $cutfile 切割后的图片
* @param int $cutWidth 要截取的宽度
* @param int $cutHeight 要截取的高度
+----------------------------------------------------------
* @return void
*/
static function cut($image,$cutfile,$cutWidth='',$cutHeight=''){
$cutHeight = intval($cutHeight);
$cutWidth = intval($cutWidth);
$info = Image::getImageInfo($image);
if($info){
if(empty($cutHeight) && empty($cutWidth)){
//将原图拷贝一份
copy($image,$cutfile);
return true;
}
$srcWidth = $info['width']; //原始宽
$srcHeight = $info['height']; //原始高
$ext = $info['type'];
//原始宽高比
$oWHP = $srcWidth/$srcHeight;
//要截取的图的宽高比
$cWHP = $cutWidth/$cutHeight;
//获取缩放比例
if($oWHP > $cWHP){
//以为高为基准缩放
$sp = $cutHeight/$srcHeight;
}else{
//以宽为基准缩放
$sp = $cutWidth/$srcWidth;
}
$_s_x = ($srcWidth - $cutWidth/$sp) / 2 ;
$_s_y = ($srcHeight - $cutHeight/$sp) / 2;
$func = ($ext != 'jpg' && $ext !='jpeg') ? 'imagecreatefrom' . $ext : 'imagecreatefromjpeg';
$img_r = call_user_func($func,$image);
$dst_r = ImageCreateTrueColor( $cutWidth, $cutHeight );
$back = ImageColorAllocate( $dst_r, 255, 255, 255 );
//将dst_r着色
ImageFilledRectangle( $dst_r, 0, 0, $cutWidth, $cutHeight, $back );
ImageCopyResampled( $dst_r, $img_r, 0, 0, $_s_x,$_s_y, $srcWidth*$sp, $srcHeight*$sp, $srcWidth, $srcHeight );
ImagePNG($dst_r, $cutfile);
imagedestroy($dst_r);
imagedestroy($img_r);
}else{
return false;
}
}