在開發中有時須要獲取通過編輯過的圖片,比圖裁減,濾鏡等,那麼該如何獲取呢?下面提出幾種方法拱參考。html
1. 使用 AlAssetRepresentation的fullScreenImage方法,該方法最簡單,獲取的圖片跟相冊裏面看到的圖片同樣,由於系統」相冊」程序顯示的圖片是 fullScreenImage ,而不是fullResolutionImage ,可是該方法的問題是得到圖片分辨率只有屏幕尺寸這麼大,在碰到長圖的時候就無能爲力了,而若是咱們使用fullResolutionImage 的話,會發現取的圖片是原圖,而非編輯過的。所以若是不考慮分辨率的問題,那麼該方法是獲取編輯過的圖片的一個好的選擇。 ios
2. 使用圖片metadata字典中的AdjustmentXMP信息,全部的asset會把他們相關的修改信息(裁減,濾鏡等)放在metadata字典中的AdjustmentXMP中,所以咱們能夠解析出其修改信息,並應用到fullResolutionImage上, 這樣就能得到高分辨率且編輯過的圖片,即使是長圖也能應付。app
ALAssetRepresentation *representation = [asset defaultRepresentation]; CGImageRef fullResImage = [representation fullResolutionImage]; NSString *adjustment = [[representation metadata] objectForKey:@"AdjustmentXMP"]; if (adjustment) { NSData *xmpData = [adjustment dataUsingEncoding:NSUTF8StringEncoding]; CIImage *image = [CIImage imageWithCGImage:fullResImage]; NSError *error = nil; NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData inputImageExtent:image.extent error:&error]; CIContext *context = [CIContext contextWithOptions:nil]; if (filterArray && !error) { for (CIFilter *filter in filterArray) { [filter setValue:image forKey:kCIInputImageKey]; image = [filter outputImage]; } fullResImage = [context createCGImage:image fromRect:[image extent]]; } } UIImage *adjustImage = [UIImage imageWithCGImage:fullResImage scale:[representation scale] orientation:(UIImageOrientation)[representation orientation]];