最近在写一个服务号图片裁剪的功能
可是遇到了一个问题就是苹果手机上传图片会自动翻转九十度
找了好长时间才发现…原来苹果手机不知道为啥,上传时候的宽高是反的,而且苹果手机拍出来的照片会自带exif信息,其中一个重要参数Orientation是来控制照片翻转的,而安卓手机就会自动将这个参数归零
不过后来想出了解决办法,主要是先判断是否为苹果手机
代码如下
这里来判断手机系统是什么 框架是tp5.0
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($user_agent,'iphone')){
$file = request()->file('images');
$info = $file->move(ROOT_PATH . 'public' . DS.'uploadimgs');
$img_url = '.'.DS.'uploadimgs'.DS.$info->getSaveName();
//这里我使用的是tp5.0自带的快速实例化model 同学们要根据自己的代码来改一下
model('Album','service')->iphoneImg($img_url);
}elseif (strpos($user_agent,'android')){
$file = request()->file('images');
$info = $file->move(ROOT_PATH . 'public' . DS.'uploadimgs');
$img_url = '.'.DS.'uploadimgs'.DS.$info->getSaveName();
}elseif (strpos($user_agent,'ipad')){
$file = request()->file('images');
$info = $file->move(ROOT_PATH . 'public' . DS.'uploadimgs');
$img_url = '.'.DS.'uploadimgs'.DS.$info->getSaveName();
model('Album','service')->iphoneImg($img_url);
}
相信大家也注意到了 这里判断如果是苹果手机的话会跳转到一个方法 就是翻转苹果手机拍出来的照片的关键了
代码如下
public function iphoneImg($img_url){
$exif = exif_read_data($img_url);
$image = imagecreatefromjpeg($img_url);
if(!empty($exif['Orientation'])){
if($exif['Orientation'] == 3) {
$result = imagerotate($image, 180, 0);
imagejpeg($result, $img_url,100);
} elseif($exif['Orientation'] == 6) {
$result = imagerotate($image, -90, 0);
imagejpeg($result, $img_url, 100);
} elseif($exif['Orientation'] == 8) {
$result = imagerotate($image, 90, 0);
imagejpeg($result, $img_url, 100);
}
isset($result) && imagedestroy($result);
imagedestroy($image);
}
}
在这里我处理代码主要使用了exif_read_data这个函数,读取照片的exif信息,然后根据信息来进行照片翻转,其中用到了一些PHP自带的图片处理函数,同学们感兴趣的话可以自己搜索一下…