ios中獲編輯過的圖片問題

在開發中有時須要獲取通過編輯過的圖片,比圖裁減,濾鏡等,那麼該如何獲取呢?下面提出幾種方法拱參考。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]];
相關文章
相關標籤/搜索