2015-03-12 10 views
7

dopo che ho preso una foto con la fotocamera i salvare l'immagine con il seguente codice:URL dell'immagine dopo UIImageWriteToSavedPhotosAlbum a Swift

UIImageWriteToSavedPhotosAlbum(image, self,"image:didFinishSavingWithError:contextInfo:", nil) 

Questo salva l'immagine nel rullino fotografico. Inoltre voglio salvare l'URL di questa immagine salvata in Core Data. È possibile recuperare l'URL (o il percorso) in modo che sia necessario solo salvare questo URL e non l'intera immagine in Core Data?

+0

Possibile duplicato di: http://stackoverflow.com/questions/4457904/iphone-how-do-i-get-the-file-path-of-an-image-saved-with-uiimagewritetosavedpho – Juul

+1

Queste risposte sono sfortunatamente scritte in ObjectiveC. Avrei bisogno di questo nel linguaggio di programmazione Swift ... – ManzMoody

risposta

6

Dopo aver letto un sacco di risposte scritte a ObjectivC ho finalmente capito come scrivere questo a Swift con Xcode 6.2:

ALAssetsLibrary().writeImageToSavedPhotosAlbum(image.CGImage, orientation: ALAssetOrientation(rawValue: image.imageOrientation.rawValue)!, 
      completionBlock:{ (path:NSURL!, error:NSError!) -> Void in 
       println("\(path)") 
     }) 
+1

Non dimenticare la dichiarazione di importazione: 'import AssetsLibrary';) – gfpacheco

+1

N.B. Questa API è obsoleta a partire da iOS 9. Come detto da Tys in un commento in http://stackoverflow.com/a/4458451/171144 "Usa invece la PHPhotoLibrary e il metodo" performChanges "per salvare le immagini sul dispositivo." – fractious

2

Qui è la mia combinazione ..

risparmio Image:

let imageData = NSData(data:UIImagePNGRepresentation(pickedimage)) 
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 
    var docs: String = paths[0] as! String 
    let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png") 
    let result = imageData.writeToFile(fullPath, atomically: true) 

    print(fullPath) 

Get Image:

let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory 
    let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask 
    if let paths   = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) 
    { 
     if paths.count > 0 
     { 
      if let dirPath = paths[0] as? String 
      { 
       let readPath = dirPath.stringByAppendingPathComponent("yourNameImg.png") 
       let image = UIImage(contentsOfFile: readPath) 

       UploadImagePreview.image = image 
      } 
     } 
    } 

Possiamo provare Photos Framework per recuperare l'ultima immagine salvata.

var fetchOptions: PHFetchOptions = PHFetchOptions() 

    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

    var fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions) 

    if (fetchResult.firstObject != nil) { 

     var lastAsset: PHAsset = fetchResult.lastObject as! PHAsset 

     PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: self.UploadImagePreview.bounds.size, contentMode: PHImageContentMode.AspectFill, options: PHImageRequestOptions(), resultHandler: { (result, info) -> Void in 

      self.UploadImagePreview.image = result 

     }) 

    } 
+0

Se abbiamo bisogno di un solo oggetto, potremmo usare 'fetchOptions.fetchLimit = 1'. Anche l'ordine è sbagliato, dovrebbe essere "ascendente: falso". –

Problemi correlati