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度

參考資料

https://www.php.net/manual/en/function.exif-read-data.php

Tags : php