? ? ? 最近因做直播項目需要,要求上傳直播的一個Cover頁需要自定義裁剪圖片的尺寸及比例,因為imagePicker只有一個imagePicker.allowsEditing這么個屬性,但是這個屬性設置之后,圖片只能裁剪成1:1的正方形,而且具體尺寸也不能改變,太死板,自己在網(wǎng)上找了一些資料,然后自己試著做了一個小Demo,給大家分享一下:
Demo連接:https://github.com/iosweihui/WHCropImage
原生裁剪是這樣的:

Demo里面選擇照片之后可以通過手勢來調(diào)整圖片尺寸和比例


還有一點說明就是Demo里面加了一個分類:UIImage+FixOrientation

這個問題是有關iOS設備拍照的問題,就是用手機拍照之后當你使用這個圖片的時候你會發(fā)現(xiàn)圖片被翻轉了90,應該有不少人遇到過這個問題吧.
我再做的時候是在用手機豎屏進行拍攝的情況下,通過
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
方法得到照片之后對圖片進行裁剪操作之后會導致image的一個imageOrientation屬性發(fā)生變化,有種說法是只要照片大于2M就會出現(xiàn)這個問題:




用相機拍攝出來的照片含有EXIF信息,UIImage的imageOrientation屬性指的就是EXIF中的orientation信息。
相機拍照后直接取出來的UIimage(用UIImagePickerController OriginalImage取出),它本身的imageOrientation屬性是3,即UIImageOrientationRight。如果這個圖片直接使用則沒事,但是如果對它進行裁剪、縮放等操作后,它的這個imageOrientation屬性會變成0。此時這張圖片用在別的地方就會發(fā)生旋轉。
如果我們忽略orientation信息,而直接對照片進行像素處理或者drawInRect等操作,得到的結果是翻轉或者旋轉90之后的樣子。這是因為我們執(zhí)行像素處理或者drawInRect等操作之后,imageOrientaion信息被刪除了,imageOrientaion被重設為0,造成照片內(nèi)容和imageOrientaion不匹配。
所以,在對照片進行處理之前,先將照片旋轉到正確的方向,并且返回的imageOrientaion為0,但是imageOrientaion這個屬性是只讀的,那么我們就可采用Category來解決,就是Demo中的那個UIImage+FixOrientation.