9

我正在为 iOS 编写一个 Swift 应用程序。我想知道如何从用户的相机胶卷(或他们现在所说的任何东西)中获取图像并将其保存在本地应用程序中,以便我以后可以参考它。怎么办?例如,假设我想获取图像并将其设置为我的故事板中 UIImageView 的图像。

4

5 回答 5

5

这正是UIImagePickerController结合NSUserDefaults将要做的事情。

对你来说,这将是一个两部分的任务。首先,您必须使用 a 捕获图像,UIImagePickerController然后将其存储在他们的照片库中,或者使用 将其存储在他们的设备上NSUserDefaults

要存储图像NSUserDefaults,请参阅此问题

于 2014-11-02T23:01:11.580 回答
4

这是我的组合。

保存图像:

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
    })
}
于 2015-09-02T11:31:46.280 回答
2

Ray Wenderlich 有一个很棒的教程,使用 aUIImagePickerController选择图像,然后使用AssetsLibrary保存到相册。

还有关于使用图像过滤器的信息比您在教程中要求的要多。

于 2014-11-02T23:48:27.950 回答
2

获得 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)
于 2015-07-02T06:37:48.517 回答
0

您绝对应该UIImagePickerController像 Brian 提到的那样使用 a,一旦您选择了图像,请使用此文件管理器方法。我不建议使用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")
}
于 2015-08-11T23:09:34.290 回答