2016-02-08 1 views
2

Mes **GMImagePickerController** renvoie la liste des images sélectionnées de l'application de photos.Comment obtenir l'image et le type de support d'origine de PHAsset?

Les codes sont les suivants.

- (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); 
    } 

Le résultat de retour assetArray comme ça, je choisis 3 images à partir app photos

(
"<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 " 
) 

Maintenant, le problème est que je veux OriginalImage et mediaType de résultat ci-dessus pour stocker l'image dans le répertoire de documents. S'il vous plaît aidez-moi à résoudre ce problème.

+0

Je pense que vous utilisez mauvaise bibliothèque je vérifie https://github.com/guillermomuntaner/GMImagePicker que le retour image originale –

+0

vérifier cette http: // stackoverflow.com/questions/32687403/phasset-get-original-file-name –

+0

passez l'actif au gestionnaire de ressources et récupérez les informations. –

Répondre

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; 


         }]; 
    } 

} 

En utilisant PHImageManager, nous pouvons obtenir une image originale complète.

2

Pour vérifier le type de support que vous pouvez utiliser la propriété suivante 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 
} 

Pour obtenir l'image originale de PHAsset vous pouvez effectuer les opérations suivantes:

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 
} 
0

Vous pouvez obtenir l'URL à la fichier original et vérifiez le contenu. Avec cela, vous pouvez obtenir des données EXIF ​​et tout ce genre de choses:

/* 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) 
     }) 
    }