php exif處理
最近碰到了使用exif旋轉的圖片因為縮圖後exif消失,導致圖片顯示不正常,紀錄一下縮圖時轉回的方法。
方法
讀取exif資料並轉回來,因為GD無法處理鏡像所以只做了旋轉的處理。
//$from為檔案路徑
$file_info = getimagesize($from);
$exif = exif_read_data($from);
if($file_info["2"] == 3){//PNG
$image = imagecreatefrompng($from);
}else if ($file_info["2"] == 1){//GIF
$image = imagecreatefromgif($from);
}else if ($file_info["2"] == 2){//JPG
$image = imagecreatefromjpeg($from);
}else{
return false;
}
//或$image = imagecreatefromstring(file_get_contents($from));
if (isset($exif['Orientation'])) {
switch($exif['Orientation']) {
case 3:
$rotateAngle = 180;
break;
case 6:
$rotateAngle = -90;
break;
case 8:
$rotateAngle = 90;
break;
default:
$rotateAngle = 0;
break;
}
$image = imagerotate($image, $rotateAngle, 0);
}
//存檔
exif Orientation對應的角度
1:一般模式(無旋轉)
2:左右翻轉(鏡像)
3:順時針旋轉180度
4:垂直翻轉
5:左右翻轉+順時針270度
6:順時針旋轉270度
7:左右翻轉+順時針旋轉90度
8:順時針旋轉90度