【问题标题】:Get images from Document Directory not file path Swift 3从文档目录而不是文件路径 Swift 3 获取图像
【发布时间】:2018-02-13 05:12:23
【问题描述】:

这就是我保存图像的方式

    let format = DateFormatter()
    format.dateFormat="MMMM-dd-yyyy-ss"
    let currentFileName = "\(format.string(from: Date())).img"
    print(currentFileName)

    // Save Images
    let fileMgr = FileManager.default
    let dirPath = fileMgr.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let imageFileUrl = dirPath.appendingPathComponent(currentFileName)



        do {

            try UIImagePNGRepresentation(returnedImages)!.write(to: imageFileUrl)

            print("Image Added Successfully")

    } catch {

        print(error)

        }

下面是我用来检索图像的代码,但我获取的是 URL 而不是图像文件来填充 tableview。任何帮助将不胜感激

   let fileManager = FileManager.default
   let imageUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask) [0].appendingPathComponent("img")

   print("Your Images:\(imageUrl)")

【问题讨论】:

  • 我认为你可以使用 UIImage(contentsOfFile: yourUrl) 从这个 url 获取图片
  • @ 3stud1ant3 感谢您的回答,但是当我按照您的建议执行此操作时:让 image:UIImage = UIImage(contentsOfFile: imageUrl).我收到错误“无法将 'URL' 类型的值转换为预期的参数类型 'String'”
  • 你遇到了什么错误?
  • 对不起,我添加了上面的错误
  • 好的,用这个imageUrl.path代替imageUrl

标签: swift swift3 xcode8 nsdocumentdirectory


【解决方案1】:

试试这个

 func getImage(){
        let fileManager = FileManager.default
        let imagePAth = (self.getDirectoryPath() as NSString).appendingPathComponent("apple.jpg") // saved image name apple.jpg
        if fileManager.fileExists(atPath: imagePAth){
            self.lockbackImageview.image = UIImage(contentsOfFile: imagePAth)
        }else{
            print("No Image")
            self.lockbackImageview.image = UIImage.init(named: "1.jpg")
        }
    }

【讨论】:

    【解决方案2】:

    这仅仅是因为您的图片名称无效。使用调试器找到imageUrl 的确切值,我敢打赌它类似于.../Documents/img。你想要的更像.../Documents/Sep-04-2017-12.img

    您必须将currentFileName 存储在视图控制器中,以便以后可以引用它。

    另外,您的命名策略非常脆弱。许多图像最终可以共享一个名称。


    如果您有一个充满图像的文件夹,您可以迭代该文件夹以取回 img 文件:

    let fileManager = FileManager.default
    let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
    let directoryContents = try! fileManager.contentsOfDirectory(at: documentDirectory, includingPropertiesForKeys: nil)
    for imageURL in directoryContents where imageURL.pathExtension == "img" {
        if let image = UIImage(contentsOfFile; imageURL.path) {
            // now do something with your image
        } else {
           fatalError("Can't create image from file \(imageURL)")
        }
    }
    

    【讨论】:

    • 感谢您的回复。你是对的,这就是我得到的价值。然而,每当图像被保存时,他们都会像这个“September-04-2017-11.img”一样保存。我正在尝试在单独的视图控制器中检索图像。
    • 然后iterate through您的文档文件夹并选择所有.img文件。或者您可以将文件名数组传递给第二个控制器
    • 每当我尝试遍历文档文件夹时,我都会收到“文件夹“.img”不存在。”
    • 您在错误的级别进行迭代。删除appendingPathComponent 调用
    • 得到相同的结果,也许我做错了什么。你介意告诉我,你将如何做到这一点?
    猜你喜欢
    • 2014-07-09
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多