【问题标题】:How to get Original Image and media type from PHAsset?如何从 PHAsset 获取原始图像和媒体类型?
【发布时间】:2016-02-08 07:05:22
【问题描述】:

我的**GMImagePickerController** 从照片应用返回所选图像的列表。

代码如下。

  - (void)assetsPickerController:(GMImagePickerController *)picker  didFinishPickingAssets:(NSArray *)assetArray
     {
        NSLog(@"%@",assetArray);
        NSLog(@"GMImagePicker: User ended picking assets. Number of selected items is: %lu", (unsigned long)assetArray.count);
  }

assetArray 返回结果是这样的,我从照片应用中选择了 3 张图片

 (
"<PHAsset: 0x7fa39e02e840> 1AEEF04A-F8AB-4019-AAB5- 2875CFD8F8E3/L0/001 mediaType=1/0, sourceType=1, (425x425), creationDate=2016-02-03 13:53:17 +0000, location=0, hidden=0, favorite=0 ",
"<PHAsset: 0x7fa39e02c840> 50489C13-55D0-4518-B290-B01B99D66996/L0/001 mediaType=1/0, sourceType=1, (425x335), creationDate=2016-02-03 13:53:08 +0000, location=0, hidden=0, favorite=0 ",
"<PHAsset: 0x7fa39e02c750> D0A466B2-9CF2-4FD9-A12F-07921A1D0E8F/L0/001 mediaType=1/0, sourceType=1, (425x365), creationDate=2016-02-03 13:53:04 +0000, location=0, hidden=0, favorite=0 "
 )

现在的问题是我想从上面的结果中获取OriginalImagemediaType 以将图像存储到文档目录中。 请帮我解决这个问题。

【问题讨论】:

标签: ios objective-c ios8 uiimagepickercontroller phasset


【解决方案1】:

要检查媒体类型,您可以使用 phasset 的以下属性

if asset.mediaType == .image{
 //do anything for image asset

}else if asset.mediaType == .video{
 //do anything for video asset

}else if asset.mediaType == .audio{
 //do anything for audio asset
}

要从 PHAsset 获取原始图像,您可以执行以下操作:

let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat

let manager = PHImageManager.default()
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode:PHImageContentMode.default, options: requestImageOption) { (image:UIImage?, _) in
        // process the original image
 }

【讨论】:

    【解决方案2】:
     NSLog(@"====%@====",assetArray);
    
    for(int i=0;i<assetArray.count;i++)
    {
        self.requestOptions = [[PHImageRequestOptions alloc] init];
        self.requestOptions.resizeMode   = PHImageRequestOptionsResizeModeExact;
        self.requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
    
        // this one is key
        self.requestOptions.synchronous = true;
    
        //  self.assets = [NSMutableArray arrayWithArray:assets];
        PHImageManager *manager = [PHImageManager defaultManager];
        Albumimages = [NSMutableArray arrayWithCapacity:[assetArray count]];
    
        // assets contains PHAsset objects.
        __block UIImage *ima;
    
        for (PHAsset *asset in assetArray) {
            // Do something with the asset
    
            [manager requestImageForAsset:asset
                               targetSize:PHImageManagerMaximumSize
                              contentMode:PHImageContentModeDefault
                                  options:self.requestOptions
                            resultHandler:^void(UIImage *image, NSDictionary *info) {
                             //retrive all  images   
                         ima = image;
    
    
                            }];
        }
    
    }
    

    使用 PHImageManager 我们可以获得完整的原始图像。

    【讨论】:

      【解决方案3】:

      您可以获取原始文件的 URL 并检查内容。有了这个,您可以获得 EXIF 数据和所有这些东西:

        /* Get the URL of the source image in the Asset */
        func getAssetURL(asset: PHAsset, completion: @escaping (_ url: URL?) -> Void) {
            let options = PHContentEditingInputRequestOptions()
            options.isNetworkAccessAllowed = false
            asset.requestContentEditingInput(with: options, completionHandler: { (contentEditingInput, dictionary) in
                completion(contentEditingInput?.fullSizeImageURL)
            })
        }
      

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-29
        • 2021-09-06
        • 1970-01-01
        相关资源
        最近更新 更多