【问题标题】:Save image from URL and make it persist IOS Swift从 URL 保存图像并使其持久化 IOS Swift
【发布时间】:2016-12-30 08:05:35
【问题描述】:

我想保存来自 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   
            }
        }
    }

我怎样才能保存背景图片以持久化?

谢谢!

【问题讨论】:

    标签: ios swift uiimage data-persistence


    【解决方案1】:

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

    【讨论】:

    • 感谢安萨里博物馆!
    • @MikeMe 欢迎兄弟 :) 编码愉快
    【解决方案2】:

    我建议您将图像存储在您的文档目录中,您可以在下载图像并从 NSData 转换为 UIImage 后使用以下代码

    斯威夫特 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:)?
    • 是的,我应该在回答中提到这是 swift 2.3 的语法
    • 知道如何在 Swift 5 中执行此操作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多