關於蘋果手機上傳圖片導致翻轉問題 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自帶的圖片處理函數,同學們感興趣的話可以自己搜索一下…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章