解決相冊和拍照的UIImage旋轉(zhuǎn)90度的問題

場景

  • 1.在調(diào)用系統(tǒng)UIImagePickerController拍照,豎著拍照,然后獲取UIImage原圖,上傳到服務(wù)器發(fā)現(xiàn)贞盯,圖片逆時針旋轉(zhuǎn)了90度。
  • 2.在調(diào)用系統(tǒng)UIImagePickerController的相冊沪饺,選擇的是豎的圖片躏敢,然后獲取UIImage原圖,上傳到服務(wù)器發(fā)現(xiàn)整葡,發(fā)現(xiàn)圖片也逆時針旋轉(zhuǎn)了90度件余。
  • tip:1.在用相冊和拍照時候,UIImagePickerController的allowsEditing沒有設(shè)置為YES.兩者取用的都是UIImagePickerControllerOriginalImage原始圖片遭居。
    2.如果UIImagePickerController的allowsEditing設(shè)置為YES啼器,而且圖片取的是UIImagePickerControllerEditedImage,就不會出現(xiàn)圖片的旋轉(zhuǎn)問題
    如下圖使用的圖片魏滚。
    正.jpeg

    問題圖片:
    旋轉(zhuǎn).jpeg

開始的代碼

# pragma mark ------  拍照相冊的代理 ----
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    [picker dismissViewControllerAnimated:YES completion:^{
        
    }];
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    self.imageview.image = image;
    self.isSelectPhoto=YES;
    self.updateImage.hidden = NO;
    [self updateCreateBtnStatus];
}

問題排查

選取的image直接 在UIImageView 上顯示镀首,方向沒有問題坟漱,相冊中鼠次,也沒有問題。
但是將image寫到沙盒目錄下芋齿,就會出現(xiàn)上圖旋轉(zhuǎn)的問題腥寇,如果把這個圖上傳給服務(wù)器,后臺看到的圖片也就有問題觅捆。進(jìn)而下次再從服務(wù)器獲取的時候展示就有問題赦役。
首先,將image寫到沙盒目錄的時候栅炒,對image沒有做任何修改掂摔,這一步肯定沒問題术羔。
那就是image本身的問題,發(fā)現(xiàn)image有imageOrientation的只讀屬性乙漓,對應(yīng)的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
};
  • 打印image.imageOrientation
NSLog(@"%ld",(long)image.imageOrientation);

打印輸出image.imageOrientation.發(fā)現(xiàn).

1.橫向拍照獲取的imageOrientation輸出是0,對應(yīng)的枚舉是UIImageOrientationUp叭披。豎著拍照獲取的imageOrientation輸出是3寥殖,對應(yīng)的枚舉是UIImageOrientationRight

2.如果把 imagePickerController.allowsEditing = YES;圖片取的是UIImagePickerControllerEditedImage涩蜘,結(jié)果打印的就是橫向拍照獲取的imageOrientation輸出是3嚼贡,對應(yīng)的枚舉是UIImageOrientationRight豎著拍照獲取的imageOrientation輸出是0同诫,對應(yīng)的枚舉是UIImageOrientationtUP粤策。

3.如果把 imagePickerController.allowsEditing = YES;圖片取的是UIImagePickerControllerOriginalImage,結(jié)果打印的就是橫向拍照獲取的imageOrientation輸出是0误窖,對應(yīng)的枚舉是UIImageOrientationUP掐场。豎著拍照獲取的imageOrientation輸出是3,對應(yīng)的枚舉是UIImageOrientationRight贩猎。

按照我們的意愿正常應(yīng)該是豎著拍照獲取的imageOrientation輸出是0熊户,對應(yīng)的枚舉是UIImageOrientationUP橫向拍照獲取的imageOrientation輸出是3吭服,對應(yīng)的枚舉是UIImageOrientationRight嚷堡。綜上那這應(yīng)該就是問題所在了。豎著拍照返回來的image的方向默認(rèn)就是已經(jīng)逆時針旋轉(zhuǎn)了90度艇棕,我們在往沙盒寫入之前就需要將image調(diào)整過來蝌戒。

解決后的代碼

# pragma mark ------  拍照相冊的代理 ----
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
    [picker dismissViewControllerAnimated:YES completion:^{
        
    }];
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
     // 解決圖片偏轉(zhuǎn)90度的問題
    if(image.imageOrientation!=UIImageOrientationUp){
        UIGraphicsBeginImageContext(image.size);
        [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
        image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    self.imageview.image = image;
    self.isSelectPhoto=YES;
    self.updateImage.hidden = NO;
    [self updateCreateBtnStatus];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沼琉,隨后出現(xiàn)的幾起案子北苟,更是在濱河造成了極大的恐慌,老刑警劉巖打瘪,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件友鼻,死亡現(xiàn)場離奇詭異,居然都是意外死亡闺骚,警方通過查閱死者的電腦和手機(jī)彩扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僻爽,“玉大人虫碉,你說我怎么就攤上這事⌒匕穑” “怎么了敦捧?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵须板,是天一觀的道長。 經(jīng)常有香客問我兢卵,道長逼纸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任济蝉,我火速辦了婚禮杰刽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘王滤。我一直安慰自己贺嫂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布雁乡。 她就那樣靜靜地躺著第喳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踱稍。 梳的紋絲不亂的頭發(fā)上曲饱,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音珠月,去河邊找鬼扩淀。 笑死,一個胖子當(dāng)著我的面吹牛啤挎,可吹牛的內(nèi)容都是我干的驻谆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼庆聘,長吁一口氣:“原來是場噩夢啊……” “哼胜臊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伙判,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤象对,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宴抚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勒魔,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年酱塔,在試婚紗的時候發(fā)現(xiàn)自己被綠了沥邻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片危虱。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡羊娃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埃跷,到底是詐尸還是另有隱情蕊玷,我是刑警寧澤邮利,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站垃帅,受9級特大地震影響延届,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贸诚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一方庭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酱固,春花似錦械念、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至班眯,卻和暖如春希停,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背署隘。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工宠能, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磁餐。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓棍潘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崖媚。 傳聞我的和親對象是個殘疾皇子亦歉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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