2015-03-12 11 views
7

Po wziąłem zdjęcia z aparatu i zapisać obraz z następującego kodu:URL obrazu po UIImageWriteToSavedPhotosAlbum w Swift

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

ten zapisuje obraz w rolki aparatu. Dodatkowo chcę zapisać adres URL do tego zapisanego obrazu w danych podstawowych. Czy możliwe jest pobranie adresu URL (lub Ścieżki), aby zapisać tylko ten adres URL, a nie pełny obraz w Danych podstawowych?

+0

Możliwy duplikat: http://stackoverflow.com/questions/4457904/iphone-how-do-i-get-the-file-path-of-an-image-saved-with-uiimagewritetosavedpho – Juul

+1

Odpowiedzi te są niestety napisane w ObjectiveC. Potrzebowałbym tego w języku Swift Programming ... – ManzMoody

Odpowiedz

6

Po przeczytaniu wiele odpowiedzi pisemnych w ObjectivC w końcu zorientowali się, jak napisać to w Swift z Xcode 6.2:

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

Nie zapomnij o instrukcji import: 'import AssetsLibrary';) – gfpacheco

+1

N.B. Ten interfejs API jest przestarzały od wersji iOS 9. Jak powiedział Tys w komentarzu w http://stackoverflow.com/a/4458451/171144 "Zamiast tego użyj metody PHPhotoLibrary i" performChanges ", aby zapisać obrazy na urządzeniu." – fractious

2

Oto moja kombinacja ..

Oszczędzania Obrazek:

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

Możemy spróbować użyć Photos Framework, aby pobrać ostatnio zapisany obraz.

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

Jeśli potrzebujemy tylko jednego obiektu, możemy użyć 'fetchOptions.fetchLimit = 1'. Również kolejność jest błędna, powinna być "rosnąco: fałsz". –

Powiązane problemy