2017-06-26 3 views
0

J'essaie d'obtenir une image avec l'URL de fichier ("file: ///var/mobile/Media/DCIM/100APPLE/IMG_0056.JPG"), this method fonctionne très bien mais il y a pas moyen de le rendre meilleur? Parce que cela prend beaucoup de temps pour récupérer mon image.Retrived Image directement avec le fichier URL

J'ai essayé d'obtenir directement l'image avec l'URL, avec cette méthode:

if let url = URL(string: self.path) { 
     print(url) (print = file:///var/mobile/Media/DCIM/100APPLE/IMG_0056.JPG) 
     do { 
      let data = try Data(contentsOf: url) 
      print(data) 
      let image2 = UIImage(data: data as Data) 
      return image2 
     } catch { 
      print(error.localizedDescription) 
      // (print = Impossible d’ouvrir le fichier « IMG_0056.JPG » car vous ne disposez pas de l’autorisation nécessaire pour l’afficher.) 
      // Traduction : Unable to open file "IMG_0056.JPG" because you do not have permission to view it. 
     } 
    } 

    return nil 

Comment puis-je avoir accès à cette image directement?

Répondre

0

J'ai finalement trouvé un moyen de le rendre plus rapide. La seule façon que j'ai trouvé est de stocker dans mon objet le localIdentifier de l'objet PHAsset.

Maintenant, ma méthode ressembler à ceci:

func PHAssetForFileURL(url: NSURL) -> PHAsset? { 
    let imageRequestOptions = PHImageRequestOptions() 
    imageRequestOptions.version = .current 
    imageRequestOptions.deliveryMode = .fastFormat 
    imageRequestOptions.resizeMode = .fast 
    imageRequestOptions.isSynchronous = true 

    let options = PHFetchOptions() 
    options.predicate = NSPredicate(format: "localIdentifier == %@", self.localIdentifier) 

    let fetchResult = PHAsset.fetchAssets(with: options) 
    for index in 0 ..< fetchResult.count { 
     let asset = fetchResult[index] as PHAsset 
     var found = false 
     PHImageManager.default().requestImageData(for: asset, options: imageRequestOptions) { (_, _, _, info) in 
      if let urlkey = info?["PHImageFileURLKey"] as? NSURL { 
       if urlkey.absoluteString! == url.absoluteString! { 
        found = true 
       } 
      } 
     } 
     if (found) { 
      return asset 

     } 
    } 

    return nil 
}