【问题标题】:How to save image in document directory and fetch it in Swift如何将图像保存在文档目录中并在 Swift 中获取
【发布时间】:2018-10-13 16:04:47
【问题描述】:

我正在创建一个应用程序来捕捉照片并将其与一些 UITextField 数据一起保存。

我已使用核心数据存储UITextField 数据并且工作正常,但我无法使用核心数据保存图像。

我已经拍摄了照片并将该照片连接到下一个视图控制器进行预览,然后我需要保存并连接到主视图控制器以在UITableViewCell 中显示带有相关UITextField 数据的图片。

UITextFieldUITableViewCell 中保存和获取一切正常,但无法保存和获取图像。

【问题讨论】:

  • 我无法像文本字段一样将图像保存在核心数据中
  • 您想将图像保存在文档目录中并在另一个视图控制器上获取相同的内容吗?
  • 是的,但图像是使用不同视图控制器中的相机捕获的,并在不同视图控制器中预览
  • 创建一个类用于保存和加载图像方法,您可以在各个类中调用这些方法。就这么简单
  • 您可以将图像转换为数据并保存到coredata并取回,另一种方式是保存到文档目录,您可以在需要的地方取回。这将帮助你stackoverflow.com/questions/6821517/…

标签: ios image nsdocumentdirectory


【解决方案1】:

如果您仍然难以弄清楚这里是代码 sn-p,祝您好运

func saveImageToDocumentDirectory(image: UIImage ) {
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileName = "image001.png" // name of the image to be saved
    let fileURL = documentsDirectory.appendingPathComponent(fileName)
    if let data = UIImageJPEGRepresentation(image, 1.0),!FileManager.default.fileExists(atPath: fileURL.path){
        do {
            try data.write(to: fileURL)
            print("file saved")
        } catch {
            print("error saving file:", error)
        }
    }
}


func loadImageFromDocumentDirectory(nameOfImage : String) -> UIImage {
    let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
    let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
    let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
    if let dirPath = paths.first{
        let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent(nameOfImage)
        let image    = UIImage(contentsOfFile: imageURL.path)
        return image!
    }
    return UIImage.init(named: "default.png")!
}

【讨论】:

  • 我可以在tableview单元格中调用加载函数吗?
  • 因为您正在从文档目录加载图像,而不是调用任何 api 从服务器加载图像。你可以随它去。
  • 我没有单独创建任何imageName,在tableview中调用函数加载时我需要传递哪个图像名称?
  • 图片名称是图片的唯一标识,存储时需要指定图片名称“fileName”,这样就可以很方便的获取同名图片
  • 那么我需要在tableview单元格中调用加载函数吗?传递nameOfImage参数和fileName值?
【解决方案2】:
  import UIKit
  class ViewController: UIViewController { 
    @IBOutlet weak var myimageview: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()   
        getSaveImage()
    }

func getSaveImage()
{
    let document = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
            
            print("Document :\(document)")
            
            let imgurl = document.appendingPathComponent("img1", isDirectory: true)
           
             print("Image Url : \(imgurl.path)")
            
            if !FileManager.default.fileExists(atPath: imgurl.path)
            {
                do{
                    try UIImage(named: "img1")!.jpegData(compressionQuality: 0.75)!.write(to: imgurl)
                    print("image save")
                }
                catch{
                    print("image not save")
                }
            }
            myimageview.image = UIImage(contentsOfFile: imgurl.path)
        }
   } 

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2016-06-24
    • 2015-12-26
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多