UIImageJPEGRepresentation | generateJPEGRepresentation将图像保存为nil?斯威夫特3

时间:2017-02-25 01:52:44

标签: ios swift swift3 nsdata uiimagejpegrepresentation

我目前正在使用Realm设计数据库管理应用程序,我已成功创建并检索了一个对象。我遇到的问题是更新/编辑 - 专门更新用户上传的UIImage。使用Realm,我保存图像的路径,然后通过加载该路径(在文档目录中)来检索它。

当用户尝试保存更改的图像时,由于某些奇怪的原因,UIImageJPEGRepresentation将更改的图像保存为nil,从而删除用户的图像。这很奇怪,因为数据对象的初始创建存储得很好。

我试图通过一些调试来检查图像是否正确传递,并且发现它确实正常并且正在保存正确的路径。

这是我的更新方法:

func  updateImage() { 
    let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    let fileURL = documentsDirectoryURL.appendingPathComponent("\(selectedPicPath!)")

    if FileManager.default.fileExists(atPath: fileURL.path) {
        do {
            if profilePic.image != nil {
            let image = profilePic.image!.generateJPEGRepresentation()
            try! image.write(to: fileURL, options: .atomicWrite)
            }
        } catch {
            print(error)
        }
    } else {
            print("Image Not Added")
    }
}

任何人都可以看到任何问题吗?

1 个答案:

答案 0 :(得分:3)

let image = profilePic.image!.generateJPEGRepresentation()

检查此行,是否返回零值或数据?如果为nil,则使用以下代码测试您的图像存储,它正在工作。还要确保您的实际图像具有JPEG文件格式扩展名,即您要生成的图像。

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

//对于PNG图像

if let image = UIImage(named: "example.png") {
    if let data = UIImagePNGRepresentation() {
        let filename = getDocumentsDirectory().appendingPathComponent("copy.png")
        try? data.write(to: filename)
    }
}

对于JPG图像

if let image = UIImage(named: "example.jpg") {
    if let data = UIImageJPEGRepresentation(image, 1.0) {
        let filename = getDocumentsDirectory().appendingPathComponent("copy.jpg")
        try? data.write(to: filename)
    }
}