1.用exif_read_data函数获取图片头部信息判断旋转;
2.扩展安装,宝塔中如图:
安装EXIF扩展。本地测试环境如下图:
放出mbstring、exif扩展;
3.图片信息获取及旋转,laravel中代码如下:
if($request->hasFile('file')&&$request->file('file')->isValid()){
$file=$request->file('file');
if(function_exists('exif_read_data')){//判断函数是否能用;如果不能用,则需要开启扩展(extension=php_exif、mbstring)
$exif = @exif_read_data($file);//读取 EXIF 头信息.加上@避免截图的图片报错(ErrorException: exif_read_data(php571C.tmp))
}else{
$exif=true;
}
//截图的获取不到头部信息。通过微信发送之后,少了很多属性(没了Orientation)。
$orientation=is_array($exif)&&in_array('Orientation',$exif)?$exif['Orientation']:1;
$destinationPath = 'upload/editor'; //文件存储路径
$filename = date("YmdHis").mt_rand(100,999).".".$file->getClientOriginalExtension();//为了避免简单文件名重复,新生成文件名
$file->move($destinationPath,$filename);
$soure= @imagecreatefromjpeg($filename);//获取原图像的图像资源jpg
if(!$soure){
$soure= @imagecreatefrompng($filename);//获取原图像的图像资源png
if(!$soure){
return “我不认识这图片后缀”;
}
}
$url=$destinationPath."/".$filename;
//对于特殊图片进行旋转
switch ($orientation)
{
case 8: $soure = imagerotate($soure, 90, 0);
return ['code'=>1,'msg'=>'上传成功,并且旋转了90°','url'=>$url];
break;
case 3: $soure = imagerotate($soure, 180, 0);
return ['code'=>1,'msg'=>'上传成功,并且旋转了180°','url'=>$url];
break;
case 6: $soure = imagerotate($soure, -90, 0);
return ['code'=>1,'msg'=>'上传成功,并且旋转了-90°','url'=>$url];
break;
}
return ['code'=>1,'msg'=>'上传成功,没有旋转','url'=>$url];
}
4.祝您发财。