最近在寫一個服務號圖片裁剪的功能
可是遇到了一個問題就是蘋果手機上傳圖片會自動翻轉九十度
找了好長時間才發現…原來蘋果手機不知道爲啥,上傳時候的寬高是反的,而且蘋果手機拍出來的照片會自帶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自帶的圖片處理函數,同學們感興趣的話可以自己搜索一下…