2014-11-02 85 views
8

我正在爲iOS編寫一個Swift應用程序。我想知道如何從用戶的相機膠捲中獲取圖像(或者他們最近調用的任何圖像),並將其保存在本地應用程序中,以便稍後參考。怎麼會這樣呢?作爲一個例子,假設我想獲取圖像並將其設置爲故事板中UIImageView的圖像。iOS&Swift - 如何從用戶獲取並保存UIImage?

+0

查找ALAssetsLibrary – Abizern 2014-11-02 23:04:30

+0

我認爲這個鏈接將幫助你很多[點擊這裏] [1] [1]:http://stackoverflow.com/questions/25730830/how-在照相機上使用照片框架 – 2014-11-03 09:58:07

回答

4

這正是UIImagePickerController加上NSUserDefaults會做的。

對你而言,它將是一個兩部分任務。首先,您必須用UIImagePickerController捕捉圖像,然後將其存儲在其照片庫中,或者將其存儲在設備上,其格式爲NSUserDefaults

要存儲圖像NSUserDefaults,請參閱this question

+10

圖像的用戶默認設置?真? – Abizern 2014-11-02 23:02:30

+0

@Abizern請參閱我的編輯。 – 2014-11-02 23:03:45

+0

這仍然是一個壞主意。您可以將圖像存儲在本地沙箱中,並使用更合適的持久性機制來引用它們。 – Abizern 2014-11-02 23:05:37

2

Ray Wenderlich有一個great tutorial用於使用UIImagePickerController選擇圖像,然後使用AssetsLibrary保存到相冊。

還有關於使用圖像過濾器的信息,超過了您在教程中要求的範圍。

+0

我得到這個錯誤。 http://postimg.org/image/gcfwet8uf/ – quillford 2014-11-03 00:00:39

+0

我知道不符合UIImagePickerControllerDelegate的唯一方法是不符合UINavigationControllerDelegate。 UIPicker需要一個導航控制器。 – 2014-11-03 02:51:25

2

一旦你得到了UIImage對象,你可以在一個文檔目錄保存圖像用下面的代碼

let imageData = NSData(data:UIImagePNGRepresentation(wineImage.image)) 
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) 
0

你絕對應該使用UIImagePickerController布賴恩提到的,一旦你有選擇的圖像使用這個文件經理方法。我不推薦使用NSUserDefaults存儲圖像,因爲它違背了Apple guidelines

let imageData = UIImagePNGRepresentation(selectedImage) 
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let imagePath = paths.stringByAppendingPathComponent("cached.png") 

if !imageData.writeToFile(imagePath, atomically: false) 
{ 
    println("not saved") 
} else { 
    println("saved") 
    NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath") 
} 
3

這裏是我的組合。

保存圖像:

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) 

獲取圖像:

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

我們可以從照片框架嘗試獲取最後保存的圖像。

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

UIImage(contentsOfFile :)不起作用 – 2016-01-23 04:19:14

+0

@ Rodrigo:它只在給出圖像的完整路徑時起作用。 – 2016-01-25 06:17:33

相關問題