从URL中保存图片并使其在IOS Swift中持久化

3
我希望从URL中保存图片,并在我的应用程序中使用它们。我将它们保存在变量中,但如何使它们持久化,直到用户删除应用程序?以下是保存图像到变量的代码:
    let backgroundURL:NSURL? = NSURL(string: "http://i.imgur.com/4AiXzf8.jpg")
    DispatchQueue.global(qos: .userInitiated).async {
        let backgroundData:NSData? = NSData(contentsOf: backgroundURL as! URL)
        DispatchQueue.main.async {
            if (backgroundData != nil) {
                background = UIImage(data: backgroundData! as Data   
            }
        }
    }

如何将背景图片保存以保持不变?

谢谢!

2个回答

2

对于Swift 3

// Assuming background is UIImage
if let image = background {
    if let data = UIImagePNGRepresentation(image) {
        let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
        try? data.write(to: filename)
    }
}

调用getDocumentsDirectory()方法

func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

谢谢Museer Ansari! - Mike Me
@MikeMe 欢迎兄弟 :) 祝你编程愉快 - Museer Ahamad Ansari

0
我建议您将图像存储在文档目录中,下面的代码可以在您下载图像并从NSData转换为UIImage后使用。
Swift 2.3
let documentsDirectoryURL = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
// Name of Image you want to store
let fileURL = documentsDirectoryURL.URLByAppendingPathComponent("ImageName.jpg")

if !NSFileManager.defaultManager().fileExistsAtPath(fileURL.path!) {
    if UIImageJPEGRepresentation(image, 1.0)!.writeToFile(fileURL.path!, atomically: true) {
        print("Image saved")
    } else {
        print("error saving Image")
    }
} else {
    print("Image name already exists")
}

以下是获取图片的方法

let fileManager = NSFileManager.defaultManager()
let imagePAth = (self.getDirectoryPath() as NSString).stringByAppendingPathComponent("imageName.jpg")

if fileManager.fileExistsAtPath(imagePAth){
let myImage: UIImage = UIImage(contentsOfFile: imagePAth)
}
else{
print("No Such Image")
}

我认为在Swift 3中,UIImageJPEGRepresentation将变成Swift的Data,因此应该是write(to: fileURL, options:) - Tj3n
是的,我应该在答案中提到这是适用于 Swift 2.3 的语法。 - Devang Tandel
有没有想法如何在Swift 5中实现这个? - NotationMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接