圖片的方向共有8種箩言,圖片的方向被包含在Exif中饭豹,而Exif則屬于圖片的一部分拄衰。EXIF(Exchangeable Image File)是“可交換圖像文件”的縮寫翘悉,當(dāng)中包含了專門為數(shù)碼相機(jī)的照片而定制的元數(shù)據(jù)妖混,可以記錄數(shù)碼照片的拍攝參數(shù)抬旺、縮略圖及其他屬性信息嚷狞。
以R為例,看下iOS中圖片的方向
PNG圖片不包含方向信息
在UIImage.h文件中锭沟,Apple關(guān)于UIImageOrientation的注釋是有問題的,具體是UIImageOrientationLeft
和UIImageOrientationRight
的注釋反過來了宏娄。應(yīng)該是
UIImageOrientationLeft
//The image is rotated 90 degrees clockwise
UIImageOrientationRight
//The image is rotated 90 degrees counterclockwise
在Apple的UIImage Class Reference中,關(guān)于Orention的注釋是正確的的卖宠,
在SDWebImage中扛伍,也對(duì)圖片的方向進(jìn)行了處理,根據(jù)exif中存儲(chǔ)的方向信息,將圖片的方向轉(zhuǎn)換為iOS中的方向吼砂。
+ (UIImageOrientation) sd_exifOrientationToiOSOrientation:(int)exifOrientation
{
UIImageOrientation orientation = UIImageOrientationUp;
switch (exifOrientation)
{
case 1:
orientation = UIImageOrientationUp;
break;
case 3:
orientation = UIImageOrientationDown;
break;
case 8:
orientation = UIImageOrientationLeft;
break;
case 6:
orientation = UIImageOrientationRight;
break;
case 2:
orientation = UIImageOrientationUpMirrored;
break;
case 4:
orientation = UIImageOrientationDownMirrored;
break;
case 5:
orientation = UIImageOrientationLeftMirrored;
break;
case 7:
orientation = UIImageOrientationRightMirrored;
break;
default:
break;
}
return orientation;
}
關(guān)鍵點(diǎn)在于如何從Exif存儲(chǔ)的方向轉(zhuǎn)換到UIKit中的方向
這里以字形F為例來進(jìn)行說明。方向1為正方向女揭。其他的方向通過旋轉(zhuǎn)吧兔、沿X軸灶平、Y軸變換都可以變成方向1逢享。
先對(duì)表格的含義解釋下瞒爬,表格中0th Row即首行,0th Column即首列,top禀横、bottom柏锄、left side七问、right side表示上下左右械巡。綜合起來的意思就是其他任何方向轉(zhuǎn)換到方向1后,轉(zhuǎn)換前的首行和首列在轉(zhuǎn)換后的位置蔼卡。轉(zhuǎn)換前任何方向的0th Row和0th Column都是top和left side。以方向2為例节仿,沿Y軸翻轉(zhuǎn)后轉(zhuǎn)換為方向1廊宪,0th Row不變,0th Column變?yōu)閞ight side女轿。方向6順時(shí)針旋轉(zhuǎn)90°后變?yōu)榉较?后箭启,0th Row變?yōu)閞ight side,0th Column變?yōu)閠op蛉迹。
參考:
1.如何處理iOS中照片的方向
2.Exif Orientation Tag