ios设备拍照上传会出现角度不正确的问题,对于这种问题我们可以在PHP后端获取图片的旋转角度然后进行修正即可
特别注意:图片必须是拍照上传的原始图片,切勿在前端通过js进行压缩等“重新生成新图片”操作,否则新生成的图片是没有角度信息的(无Orientation字段),导致PHP无法正确获取角度
1、PHP版本必须按照exif 扩展,否则exif_read_data 函数将无法使用出现致命错误
上代码
代码最有效的方式是在上传文件方法最前面进行处理,对角度处理后,不影响后面的处理逻辑
if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')||strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')){
try{
$picAddr=$_FILES['file']['tmp_name']; // 直接获取临时文件
$exif = @exif_read_data($picAddr);
if(isset($exif['Orientation'])){
$image = imagecreatefromjpeg($picAddr);
if($exif['Orientation'] == 3) {
$result = imagerotate($image, 180, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 6) {
$result = imagerotate($image, -90, 0);
imagejpeg($result, $picAddr, 100);
} elseif($exif['Orientation'] == 8) {
$result = imagerotate($image, 90, 0);
imagejpeg($result, $picAddr, 100);
}
file_put_contents('file.log',9,8);
isset($result) && imagedestroy($result);
imagedestroy($image);
}
}catch(\Exception $e){
//echo $e->getMessage();
$this->error($e->getMessage());
}
}