????????在iOS移動端開發項目中,遇到過這樣一個問題,在iOS這邊上傳的本地圖片,再下載至iOS本地預覽的圖片無異樣,可上傳至后臺,后臺得到的圖片卻被旋轉,同時由后臺返回的圖片url地址在不同的瀏覽器上預覽查看該圖片,發現不同瀏覽器也有可能被翻轉,而在iOS渲染中仍未發現問題,如:iOS本地選擇的相冊圖片或者拍攝的圖片是一張橫圖,可上傳至服務器后臺后變成了豎圖,該圖片在后臺的圖片信息展示剛好被旋轉了90°。
? ? ? ?針對以上問題,歸根結底主要是由于圖片本身自帶的懸角信息被忽略,在iOS開發中,圖片EXIF信息的這個參數和Orientation有關,相機拍攝出來的照片或者從本地相冊選擇的圖片均含有EXIF信息,UIImage的imageOrientation屬性指的就是EXIF中的orientation信息。
????????如果我們忽略orientation信息,而直接對照片進行像素處理或者drawInRect等操作,得到的結果就是翻轉或者旋轉90之后的樣子。這是因為我們執行像素處理或者drawInRect等操作之后,imageOrientaion信息被刪除了,imageOrientaion被重設,造成照片內容和imageOrientaion不匹配,通過debug我們發現,iOS手機上的豎圖的imageOrientaion為UIImageOrientationRight,橫圖的imageOrientaion為UIImageOrientationUp。所以,在對照片進行處理之前,先將圖片旋轉到正確的方向,并且返回的imageOrientaion為0。
? ? ? ?針對以上問題寫了一個針對UIImage的Category,這個分類是根據圖片的imageOrientation屬性,對image進行旋轉:
具體方法實現如下:
在實際例子中,我們只需要將需要上傳的原始圖像在處理上傳之前進行旋轉,重設為UIImageOrientationUp:
????????經過實例驗證,從iOS上傳的圖片信息,經過上傳前的懸角處理以后,上傳至服務器后臺,后臺所得到的圖片寬高信息和上傳的圖片寬高信息一致,并未旋轉90°。以上解決方案僅是開發過程中遇到的bug解放方案,特此作為隨筆記錄,希望對遇到同樣問題的開發者們有所幫助。