簡體   English   中英

iOS和Swift - 如何從用戶那里獲取和保存UIImage?

[英]iOS & Swift - How can I get and save a UIImage from the user?

我正在為iOS編寫一個Swift應用程序。 我想知道如何從用戶的相機膠卷(或者他們現在稱之為的任何東西)獲取圖像,並將其保存在應用程序中的本地,以便我以后可以參考。 怎么會這樣呢? 作為一個例子,假設我想獲取圖像並將其設置為故事板中UIImageView的圖像。

這正是UIImagePickerControllerNSUserDefaults結合使用的NSUserDefaults

對你來說,這將是一個兩部分的任務。 首先,您必須使用UIImagePickerController捕獲圖像,然后將其存儲在照片庫中,或者使用NSUserDefaults將其存儲在設備上。

要使用NSUserDefaults存儲圖像,請參閱此問題

這是我的組合。

保存圖片:

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

我們可以嘗試使用Photos Framework來獲取上次保存的圖像。

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

Ray Wenderlich有一個很棒的教程 ,可以使用UIImagePickerController選擇圖像,然后使用AssetsLibrary保存到相冊。

還有關於使用圖像過濾器的信息比本教程中要求的更多。

獲得UIImage對象后,可以使用以下代碼將圖像保存在doc目錄中

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)

一旦你讓所選圖像使用這種文件管理器方法,你肯定應該像Brian提到的那樣使用UIImagePickerController 我不建議使用NSUserDefaults來存儲圖像,因為它違反Apple指南

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM