聊聊iOS的UIImage的方向(UIImageOrientation) 一

? ? ? ? ? ? ? ? ? ? ? ? ?

下面是蘋果官方關(guān)于UIImageOrientation的定義:

typedef NS_ENUM(NSInteger, UIImageOrientation) {

? ? UIImageOrientationUp,? ? ? ? ? ? // default orientation

? ? UIImageOrientationDown,? ? ? ? ? // 180 deg rotation

? ? UIImageOrientationLeft,? ? ? ? ? // 90 deg CCW

? ? UIImageOrientationRight,? ? ? ? // 90 deg CW

? ? UIImageOrientationUpMirrored,? ? // as above but image mirrored along other axis. horizontal flip

? ? UIImageOrientationDownMirrored,? // horizontal flip

? ? UIImageOrientationLeftMirrored,? // vertical flip

? ? UIImageOrientationRightMirrored, // vertical flip

};

我們一一來(lái)看一下上面類型的具體意思:

1站绪、UIImageOrientationUp:


這個(gè)很好理解,就是圖片前后沒(méi)有變化

2尚卫、UIImageOrientationDown:


通過(guò)上面的例子可以看到,意思是圖片旋轉(zhuǎn)了180度

3方灾、UIImageOrientationLeft:


通過(guò)上面的例子可以看到称勋,意思是圖片逆時(shí)針旋轉(zhuǎn)了90度

4、UIImageOrientationRight:


通過(guò)上面的例子可以看到柬批,意思是圖片順時(shí)針旋轉(zhuǎn)了90度

5顷扩、UIImageOrientationUpMirrored:


通過(guò)上面的例子可以看到拐邪,意思是對(duì)原圖進(jìn)行了左右鏡像,即水平鏡像

6隘截、UIImageOrientationDownMirrored:


通過(guò)上面的例子可以看到扎阶,意思是對(duì)旋轉(zhuǎn)了180的圖片進(jìn)行了左右鏡像,也可以理解對(duì)原圖進(jìn)行了垂直鏡像婶芭,既上下鏡像

7东臀、UIImageOrientationLeftMirrored:


通過(guò)上面的例子可以看到,意思是對(duì)進(jìn)行逆時(shí)針旋轉(zhuǎn)90度圖片做了上下鏡像犀农,也可以理解為對(duì)進(jìn)行順時(shí)針旋轉(zhuǎn)90度圖片做了左右鏡像

8惰赋、UIImageOrientationRightMirrored:


通過(guò)上面的例子可以看到,意思是對(duì)進(jìn)行順時(shí)針旋轉(zhuǎn)90度圖片做了上下鏡像呵哨。也可以理解為對(duì)進(jìn)行逆時(shí)針旋轉(zhuǎn)90度圖片做了左右鏡像

當(dāng)具有上面旋轉(zhuǎn)屬性的original UIImage在UIImageView上面顯示的時(shí)候赁濒,會(huì)按照上面的屬性做相應(yīng)的旋轉(zhuǎn),這就是為什么有時(shí)候拍照的時(shí)候照片看起來(lái)方向是正確的孟害,但拍出來(lái)的照片顯示時(shí)候被旋轉(zhuǎn)了90度拒炎,因?yàn)檎掌姆较驅(qū)傩允荱IImageOrientationRight,這就需要對(duì)照片的方向進(jìn)行糾正:

/** 糾正圖片的方向 */

- (UIImage *)fixUIImageOrientation:(UIImage *)originalImage

{

?? ?if (originalImage.imageOrientation == UIImageOrientationUp) return originalImage;

?? ?// We need to calculate the proper transformation to make the image upright.

? ? // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

? ? CGAffineTransform transform = CGAffineTransformIdentity;

? ? switch (originalImage.imageOrientation)

? ? {

? ? ? ? case UIImageOrientationDown:

? ? ? ? case UIImageOrientationDownMirrored:

? ? ? ? ? ? transform = CGAffineTransformTranslate(transform, originalImage.size.width, originalImage.size.height);

? ? ? ? ? ? transform = CGAffineTransformRotate(transform, M_PI);

? ? ? ? ? ? break;

? ? ? ? case UIImageOrientationLeft:

? ? ? ? case UIImageOrientationLeftMirrored:

? ? ? ? ? ? transform = CGAffineTransformTranslate(transform, originalImage.size.width, 0);

? ? ? ? ? ? transform = CGAffineTransformRotate(transform, M_PI_2);

? ? ? ? ? ? break;

? ? ? ? case UIImageOrientationRight:

? ? ? ? case UIImageOrientationRightMirrored:

? ? ? ? ? ? transform = CGAffineTransformTranslate(transform, 0, originalImage.size.height);

? ? ? ? ? ? transform = CGAffineTransformRotate(transform, -M_PI_2);

? ? ? ? ? ? break;

? ? ? ? case UIImageOrientationUp:

? ? ? ? case UIImageOrientationUpMirrored:

? ? ? ? ? ? break;

? ? }

? ? switch (originalImage.imageOrientation)

? ? {

? ? ? ? case UIImageOrientationUpMirrored:

? ? ? ? case UIImageOrientationDownMirrored:

? ? ? ? ? ? transform = CGAffineTransformTranslate(transform, originalImage.size.width, 0);

? ? ? ? ? ? transform = CGAffineTransformScale(transform, -1, 1);

? ? ? ? ? ? break;

? ? ? ? case UIImageOrientationLeftMirrored:

? ? ? ? case UIImageOrientationRightMirrored:

? ? ? ? ? ? transform = CGAffineTransformTranslate(transform, originalImage.size.height, 0);

? ? ? ? ? ? transform = CGAffineTransformScale(transform, -1, 1);

? ? ? ? ? ? break;

? ? ? ? case UIImageOrientationUp:

? ? ? ? case UIImageOrientationDown:

? ? ? ? case UIImageOrientationLeft:

? ? ? ? case UIImageOrientationRight:

? ? ? ? ? ? break;

? ? }

? ? // Now we draw the underlying CGImage into a new context, applying the transform

? ? // calculated above.

? ? CGContextRef ctx = CGBitmapContextCreate(NULL, originalImage.size.width, originalImage.size.height,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CGImageGetBitsPerComponent(self.CGImage), 0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CGImageGetColorSpace(self.CGImage),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CGImageGetBitmapInfo(self.CGImage));

? ? CGContextConcatCTM(ctx, transform);

? ? switch (originalImage.imageOrientation)

? ? {

? ? ? ? case UIImageOrientationLeft:

? ? ? ? case UIImageOrientationLeftMirrored:

? ? ? ? case UIImageOrientationRight:

? ? ? ? case UIImageOrientationRightMirrored:

? ? ? ? ? ? CGContextDrawImage(ctx, CGRectMake(0,0,originalImage.size.height,originalImage.size.width), self.CGImage);

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? CGContextDrawImage(ctx, CGRectMake(0,0,originalImage.size.width,originalImage.size.height), self.CGImage);

? ? ? ? ? ? break;

? ? }

? ? CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

? ? UIImage *img = [UIImage imageWithCGImage:cgimg];

? ? CGContextRelease(ctx);

? ? CGImageRelease(cgimg);

? ? return img;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挨务,一起剝皮案震驚了整個(gè)濱河市击你,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谎柄,老刑警劉巖丁侄,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異朝巫,居然都是意外死亡鸿摇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門捍歪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)户辱,“玉大人,你說(shuō)我怎么就攤上這事糙臼÷洌” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵变逃,是天一觀的道長(zhǎng)必逆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)揽乱,這世上最難降的妖魔是什么名眉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮凰棉,結(jié)果婚禮上损拢,老公的妹妹穿的比我還像新娘。我一直安慰自己撒犀,他們只是感情好福压,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著或舞,像睡著了一般荆姆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上映凳,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天胆筒,我揣著相機(jī)與錄音,去河邊找鬼诈豌。 笑死仆救,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的队询。 我是一名探鬼主播派桩,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚌斩!你這毒婦竟也來(lái)了铆惑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤送膳,失蹤者是張志新(化名)和其女友劉穎员魏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叠聋,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撕阎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碌补。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虏束。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棉饶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镇匀,到底是詐尸還是另有隱情照藻,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布汗侵,位于F島的核電站幸缕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏晰韵。R本人自食惡果不足惜发乔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雪猪。 院中可真熱鬧栏尚,春花似錦、人聲如沸只恨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坤次。三九已至古劲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缰猴,已是汗流浹背产艾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滑绒,地道東北人闷堡。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疑故,于是被迫代替她去往敵國(guó)和親杠览。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • http://feihu.me/blog/2015/how-to-handle-image-orientation...
    wzf_taker閱讀 1,644評(píng)論 1 4
  • 1 UIImage知識(shí)點(diǎn) iOS開(kāi)發(fā)中關(guān)于UIImage的知識(shí)點(diǎn)總結(jié) http://mobile.51cto.co...
    Kevin_Junbaozi閱讀 1,665評(píng)論 0 2
  • 這篇文章主要是在開(kāi)發(fā)中遇到了纵势,需要在視頻通話時(shí)踱阿,取出某幀圖像,針對(duì)這幀圖做后續(xù)操作的求钦铁,話不多說(shuō)软舌,直接畫(huà)重點(diǎn)。...
    Multa閱讀 3,535評(píng)論 11 51
  • 今天突然明白一個(gè)道理牛曹,說(shuō)起來(lái)非常淺顯:我們總是愛(ài)上想象中的他佛点。自從半個(gè)月前在心里決定放下對(duì)暗戀的對(duì)象的情感,思路慢...
    自由穿越的風(fēng)閱讀 158評(píng)論 0 0
  • 10月5日下午14點(diǎn)到晚上22點(diǎn)用時(shí)8小時(shí),回議主題超营,回顧107天來(lái)我們所有同學(xué)和助教一起走過(guò)的歷程鸳玩,把6次大組會(huì)...
    31c47a10aded閱讀 144評(píng)論 0 0