ios - 保存图像然后在 Swift (iOS) 中加载它

标签 ios swift caching file-manager image-caching

我正在使用 saveImage 保存图像。

func saveImage (image: UIImage, path: String ) -> Bool{

    let pngImageData = UIImagePNGRepresentation(image)
    //let jpgImageData = UIImageJPEGRepresentation(image, 1.0)   // if you want to save as JPEG

    print("!!!saving image at:  \(path)")

    let result = pngImageData!.writeToFile(path, atomically: true)

    return result
}

新信息:

无法正常保存文件(打印“[-] ERROR SAVING FILE”)--

            // save your image here into Document Directory
        let res = saveImage(tempImage, path: fileInDocumentsDirectory("abc.png"))
        if(res == true){
            print ("[+] FILE SAVED")
        }else{
            print ("[-] ERROR SAVING FILE")
        }

为什么 saveImage 函数不保存图像?访问权限?

旧信息:

调试信息说:

!!!saving image at:  file:///var/mobile/Applications/BDB992FB-E378-4719-B7B7-E9A364EEE54B/Documents/tempImage

然后我使用

检索这个位置
fileInDocumentsDirectory("tempImage")

结果正确。

然后我使用这个路径加载文件

    let image = UIImage(contentsOfFile: path)

    if image == nil {

        print("missing image at: \(path)")
    }else{
        print("!!!IMAGE FOUND at: \(path)")
    }

路径是正确的,但是消息是“missing image at..”。该文件是否无法访问或未存储?这种行为的原因是什么?

我正在带有 ios 7 的 iphone 4 和带有 ios 7 模拟器的 iphone 5 上测试这段代码。

编辑: 1. fileInDocumentsDirectory函数

func fileInDocumentsDirectory(filename: String) -> String {

    let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    let fileURL = documentsURL.URLByAppendingPathComponent(filename).absoluteString
    return fileURL        
}

最佳答案

此函数将在文档文件夹中保存图像:

func saveImage(image: UIImage) -> Bool {
    guard let data = UIImageJPEGRepresentation(image, 1) ?? UIImagePNGRepresentation(image) else {
        return false
    }
    guard let directory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) as NSURL else {
        return false
    }
    do {
        try data.write(to: directory.appendingPathComponent("fileName.png")!)
        return true
    } catch {   
        print(error.localizedDescription)
        return false
    }
}

使用:

let success = saveImage(image: UIImage(named: "image.png")!)

此函数将获取该图像:

func getSavedImage(named: String) -> UIImage? {
    if let dir = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false) {
        return UIImage(contentsOfFile: URL(fileURLWithPath: dir.absoluteString).appendingPathComponent(named).path)
    }
    return nil
}

使用:

if let image = getSavedImage(named: "fileName") {
    // do something with image
}

关于ios - 保存图像然后在 Swift (iOS) 中加载它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344822/

相关文章:

iphone - 如何使用具有一定随机性的 CAReplicatorLayer 创建 Spark 效果?

ios - NSInternalInconsistencyException',原因 : 'Invalid update: invalid number of items in section 1 - While having multiple Sections

swift - 协议(protocol)扩展初始化器

java - 如何避免从 Guava 缓存中逐出条目

objective-c - 使用某个对象类的类方法

c++ - 有没有人成功为 ARC 移植 SpeakHere?

swift - 在 swift 中获取错误源的堆栈跟踪

ios - Objective-c 中调用的 Swift 协议(protocol)不起作用

java - Java HTTP 连接池是否有驱逐时间?可以设置吗?

java - 我们如何在运行java web应用程序的服务器端缓存MySQL查询?