长图片切割PHP,php 图片剪切

php 图片剪切

color   本地   else   ray   spa   png   arr   需要

/**

* 图像裁剪

* @param $source_path 原图路径

* @param $target_width 需要裁剪的宽

* @param $target_height 需要裁剪的高

* @return bool

*/

functionimagecropper($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

$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;

}

$funcList=array(

'image/gif'=>array(

'create'=>'imagecreatefromgif',

'make'=>'imagegif',

'mime'=>'.gif',

),

'image/jpeg'=>array(

'create'=>'imagecreatefromjpeg',

'make'=>'imagejpeg',

'mime'=>'.jpg',

),

'image/png'=>array(

'create'=>'imagecreatefrompng',

'make'=>'imagepng',

'mime'=>'.png',

),

);

if(isset($funcList[$source_mime])){

$curFunc=$funcList[$source_mime];

}else{

returnFALSE;

}

$source_image=$curFunc['create']($source_path);

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

//保存图片到本地(两者选一)

$randNumber=mt_rand(00000,99999).mt_rand(000,999);

//$fileName = substr(md5($randNumber), 8, 16) . ".png";

$fileName=time().'_'.substr(md5($randNumber),8,16).$curFunc['mime'];

//imagepng($target_image, './' . $fileName);

//imagepng($target_image, './' . $fileName);

//$imgFunc2($target_image, './' . $fileName);

$curFunc['make']($target_image,'./'.$fileName);

imagedestroy($target_image);

//直接在浏览器输出图片(两者选一)

/*header('Content-Type: image/jpeg');

imagepng($target_image);

imagedestroy($target_image);

imagejpeg($target_image);

imagedestroy($source_image);

imagedestroy($target_image);

imagedestroy($cropped_image);*/

}

//调用

//imagecropper('./img033.jpg',300,300);

imagecropper('./4.jpg',140,140);

//imagecropper('./img033.jpg',55,55);

?>

/**

* 图像裁剪

* @param $source_path 原图路径

* @param $target_width 需要裁剪的宽

* @param $target_height 需要裁剪的高

* @return bool

*/

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;

}

$funcList = array(

'image/gif' => array(

'create' => 'imagecreatefromgif',

'make' => 'imagegif',

'mime' => '.gif',

),

'image/jpeg' => array(

'create' => 'imagecreatefromjpeg',

'make' => 'imagejpeg',

'mime' => '.jpg',

),

'image/png' => array(

'create' => 'imagecreatefrompng',

'make' => 'imagepng',

'mime' => '.png',

),

);

if (isset($funcList[$source_mime])) {

$curFunc = $funcList[$source_mime];

} else {

return FALSE;

}

$source_image = $curFunc['create']($source_path);

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

// 保存图片到本地 (两者选一)

$randNumber = mt_rand(00000, 99999) . mt_rand(000, 999);

//$fileName = substr(md5($randNumber), 8, 16) . ".png";

$fileName = time() .'_'. substr(md5($randNumber), 8, 16) . $curFunc['mime'];

//imagepng($target_image,'./'. $fileName);

//imagepng($target_image,'./'. $fileName);

//$imgFunc2($target_image,'./'. $fileName);

$curFunc['make']($target_image,'./'. $fileName);

imagedestroy($target_image);

// 直接在浏览器输出图片 (两者选一)

/*header('Content-Type: image/jpeg');

imagepng($target_image);

imagedestroy($target_image);

imagejpeg($target_image);

imagedestroy($source_image);

imagedestroy($target_image);

imagedestroy($cropped_image);*/

}

// 调用

//imagecropper('./img033.jpg',300,300);

imagecropper('./4.jpg', 140, 140);

//imagecropper('./img033.jpg',55,55);

?>

php 图片剪切

来源: http://www.bubuko.com/infodetail-2011965.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值