PHP-图片旋转与剪裁

相关的问题:图片上传跟处理图片的参数没办法在同一个请求里一起提交
解决办法:将图片上传跟图片处理分开处理
     1.先进行图片上传,返回图片路径
     2.再在图片上传ajax的回调中将图片路径,图片处理参数进行请求图片处理
如果有其他好办法的请留下,谢谢o(∩_∩)o
/**
* 图片旋转处理
* @param string $oldFile 源图片路径
* @param string $newFile 保存路径
* @param integer $degrees 旋转角度
* @return boolean 图片是否旋转成功
*/
function pictureFlip($oldFile,$newFile,$degrees){
if(!empty($degrees)) {
//读取源图片
$data = @getimagesize($oldFile);//@是忽略报错
if ($data == false) return false;
//根据源图片创建保存文件格式
switch ($data[2]) {
case 1:
$src_f = imagecreatefromgif($oldFile);
break;
case 2:
$src_f = imagecreatefromjpeg($oldFile);
break;
case 3:
$src_f = imagecreatefrompng($oldFile);
break;
}
if ($src_f == "") {//图片格式
return false;
}
$rotate = @imagerotate($src_f, $degrees, 0);//旋转图片
if (!imagejpeg($rotate, $newFile, 100)) {//保存图片
return false;
}
@imagedestroy($rotate);
return true;
}else{
return true;
}
}

/**
* 图片裁剪
* @param string $src 源图片文件路径
* @param string $savePath 保存图片文件路径
* @param string $x1 剪裁区域相对源图片的左上横坐标
* @param string $y1 剪裁区域相对源图片的左上纵坐标
* @param string $x2 剪裁区域相对源图片的右下横坐标
* @param string $y2 剪裁区域相对源图片的右下纵坐标
* @return boolean 图片裁剪是否成功
*/
//注意:
//如果按照正常坐标来的话,但凡有0的那一边都会出现黑边的情况,我的理解是(0,0)并不是坐标的开始,(1,1)才是
//这只是个人的猜测,有空再去看源码
//所以左上角的坐标都需要+1,否则就会出现黑边把x=0,y=0的进行填充
//同理因为本身会出现对缺省的部分进行填充黑色的情况,所以x2-x1跟y2-y1都需要-2来防止缺省
//简单的理解就是一个正方形的四条边,在上面了就会被黑色填充,所以起点需要进行+1,因为是上下、左右,所以长度跟宽度都需要-2

function pictureClip($src,$savePath,$x1,$y1,$x2,$y2){
    if (is_file($src)) {
if (($x1 != $x2) && ($y1 != $y2)) {//如果旋转成功或者不需要旋转,则进行图片裁剪判断
$image = new \Think\Image();
$image->open($src);
$_clip = $image->crop(($x2 - $x1), ($y2 - $y1), $x1, $y1)->save($savePath);
} else {
$_clip = true;
}
}
return $_clip;
}

转载于:https://www.cnblogs.com/yezhenwei/p/5417107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值