如何保存图像

时间:2017-07-07 18:51:32

标签: ios swift3

我想使用userdefaults保存图像,并使用此代码在另一个视图中使用它,但它显示错误。

UserDefaults.standard.set(img , forKey : "simg")

请帮帮我

3 个答案:

答案 0 :(得分:1)

我就是这样做的。您有多个地方可以将其保存到,用户的文档文件夹通常是最好的:

func cacheImageAsPNG(image: UIImage, localID: String) {
    let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
    if let imageData = UIImagePNGRepresentation(image) {
        let filename = userDocumentsURL.appendingPathComponent("\(localID).png")

        if  FileManager.default.createFile(atPath: filename.path, contents: imageData, attributes: nil) {
            print("wrote file:\n\(filename.path)")
        } else {
            print("couldn't write the file:\n\(filename.path)")
        }
    }
}

如果您希望在内存使用高峰期间系统删除它,缓存目录是一个更好的地方:

 let cachesPath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last!

编辑:检索图像

func cachedImage(localID: String) -> UIImage? {
    let userDocumentsURL = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
    let cachePath = userDocumentsURL.appendingPathComponent("\(localID).png")

    return UIImage(named: cachePath.path)
}

答案 1 :(得分:0)

您无法将UIImage直接保存到NSUserDefaults。您可以将其保存为NSData,但这确实不可取。 NSUserDefaults用于在键值对中存储少量信息。如果你开始在那里投掷图像,你可能会重载为它保留的空间。 NSUserDefaults的内容写入plist。我相信每次访问用户默认值时,它都会读取整个文件。如果您在其中放置大图像,则会导致大量不必要的I / O.

如果您仍然决定这样做(不推荐),here是从图片中获取NSData对象的好帖子。

答案 2 :(得分:0)

正如其他人所说,不要将图像保存为用户默认值。它仅适用于少量数据。

如果您要做的只是在另一个视图控制器中传递图像,并且在用户退出并重新启动应用程序时您不关心使图像保持不变,只需在{{1}中传递图像即可}。