如何在文件管理器中保存多个图像

Posted

技术标签:

【中文标题】如何在文件管理器中保存多个图像【英文标题】:How do I save multiple UIImages in FileManager 【发布时间】:2018-07-12 01:30:31 【问题描述】:

我将用户设置的图像保存在 FileManager 中。然后,我必须检索这些图像并填充 UITableView。但是,如何保存多个不同的图像,然后将其全部恢复并呈现在我的 UITableView 上?

我面临的错误是,当我保存图像时,然后检索它,我只得到一个 UIImage,而不是多个不同的图像。即使我保存了另一个不同的图像,它也只是被替换而不是添加另一个图像。所以,这样做我无法填充 UITableView,因为我总是得到一个 UIImage 而不是多个保存的图像。

这是保存图片的功能

func saveImage(image: UIImage) -> Bool 
        let data = UIImage.pngData(image)
        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("fileName2.png")?.absoluteURL)!)
            return true
         catch 
            print(error.localizedDescription)
            return false
        
    

这就是我保存 UIImage 的方式

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
        if let image = info[.originalImage] as? UIImage 
            self.imagePreview.image = image
            self.namePreview.text = self.textFieldNome.text

           //Saving Image
            let savingImage = saveImage(image: image)
                print("\(savingImage)")


        
        self.picker.dismiss(animated: true, completion: nil)
    

这是检索图像的函数

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
    

ViewController:这就是我尝试检索图像的方式

 override func viewDidLoad() 
        super.viewDidLoad()

        if let image = getSavedImage(named: "fileName2.png") 

            print(image)

        
    

【问题讨论】:

您的问题不清楚。您的标题暗示您发布的代码存在问题。但是,您的问题的开始基本上是询问如何修改呈现的代码以处理多个图像。是哪个? 你好@rmaddy!感谢您的建议,我刚刚重新提出了我的问题 您的 saveImage 函数需要一个“名称”参数,就像您的 getSaveImage 函数一样。 @rmaddy 我忘了粘贴getSaveImage函数,我刚刚更新了问题。 @rmaddy 我面临的错误是当我保存图像时,然后我检索它我只得到一个 UIImage,而不是多个不同的图像。即使我保存了另一个不同的图像,它也只是被替换而不是添加另一个图像。你找到我了吗? 【参考方案1】:

解决方案在这里:)

import Photos

let imagesArray = [UIImage]()

for image in imagesArray  //multiple image array 
    let objImage: UIImage = image
    phphotoLibrary.shared().performChanges(
        PHAssetChangeRequest.creationRequestForAsset(from: 
objImage)
    , completionHandler:  success, error in
        if success 
            // Saved
        else 
            // failed
        
    )

【讨论】:

您好,这就是我保存数据的方式,对吗?如何在另一个屏幕中检索图像?

以上是关于如何在文件管理器中保存多个图像的主要内容,如果未能解决你的问题,请参考以下文章

保存多个文件而不替换存在的文件

如何保存具有多个图像的 django 模型?

如何从基于 SwiftUI 文档的应用程序中将多个文件保存在包文件夹中?

如何将多个数据保存在一个文本文件中

在 laravel 中更新时如何删除公共/文件夹中的多个图像?

如何在多个文件输入中动态填充文件