Action Extension

时间:2016-03-18 22:08:24

标签: ios xcode image

通常当我想在iOS中阅读一些图像元数据时,我使用imagePickerController选择图像和Photos Framework和imagePickerController:didFinishPickingMediaWithInfo: 获取图像信息并提取像这样的元数据

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

      UIImagePickerControllerSourceType pickerType = picker.sourceType;
        if(pickerType == UIImagePickerControllerSourceTypePhotoLibrary)
        {           
            NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];

            PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[url,] options:nil];

            PHAsset *asset = fetchResult.firstObject;

            [self metaDataFromPhotoLibrary:asset];
            [self dismissViewControllerAnimated:YES completion:NULL];
        }
    }


    -(void)metaDataFromPhotoLibrary:(PHAsset*)asset{

    //    NSLog(@"Start metadata");

        PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init];
        options.networkAccessAllowed = YES; //download asset metadata from iCloud if needed

        [asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
            CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];

            NSDictionary *metadata = fullImage.properties;
            NSMutableDictionary *imageMetadata = nil;

            imageMetadata = [[NSMutableDictionary alloc] initWithDictionary:metadata];

        NSString *dateString = metadata [@"{TIFF}"] [@"DateTime"];

        NSString *latitude = metadata [@"{GPS}"][@"Latitude"];

        NSString *longitude = metadata [@"{GPS}"][@"Longitude"];


            //etc etc etc 
    }

但是不能从动作扩展

做同样的事情

在扩展程序代码中我使用这样的代码来获取所选图像

- (void)viewDidLoad {
    [super viewDidLoad];

    // Get the item[s] we're handling from the extension context.

    // For example, look for an image and place it into an image view.
    // Replace this with something appropriate for the type[s] your extension supports.
    BOOL imageFound = NO;
    for (NSExtensionItem *item in self.extensionContext.inputItems) {
        for (NSItemProvider *itemProvider in item.attachments) {
            if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
                // This is an image. We'll load it, then place it in our image view.
                __weak UIImageView *immagine = self.immagine;

                [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error) {
                    if(image) {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                            [immagine setImage:image];


                        }];
                    }
                }];

                imageFound = YES;
                break;
            }
        }

        if (imageFound) {
            // We only handle one image, so stop looking for more.
            break;
        }
    }
}

使用UIImagePNGRepresentation或UIImageJPEGRepresentation我丢失了很多元数据,我只能读取一些数据! 如何从动作扩展名中选择的图像中获取所有图像元数据?

非常感谢你

注意:我在AppsStore中发现了一些从扩展程序中读取所有元数据字典的应用程序,因此必须有解决方案来解决我的问题! 再次感谢您

万尼

0 个答案:

没有答案