关于苹果手机上传图片导致翻转问题 tp5.0

最近在写一个服务号图片裁剪的功能
可是遇到了一个问题就是苹果手机上传图片会自动翻转九十度
找了好长时间才发现…原来苹果手机不知道为啥,上传时候的宽高是反的,而且苹果手机拍出来的照片会自带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自带的图片处理函数,同学们感兴趣的话可以自己搜索一下…

你可能感兴趣的:(tp5,PHP)