从 iOS 文件系统中的 UIImagePickerController 保存和删除图像

Posted

技术标签:

【中文标题】从 iOS 文件系统中的 UIImagePickerController 保存和删除图像【英文标题】:Save and delete UIImages from UIImagePickerController using iOS file system 【发布时间】:2020-07-24 00:24:16 【问题描述】:

我有一个使用 UIImagePicker 的 UICollectionView。我希望文件系统在“文档”中创建一个文件夹并保存/删除其中的 UIImages。 photoArray 目前是 UICollectionView 用来添加新 UIImages 的。 (我研究了 Apple 文件系统的文档,但很难掌握)

@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var editBarButton: UIBarButtonItem!

let imagePicker = UIImagePickerController()
var photoArray: [UIImage] = []

override func viewDidLoad() 
    super.viewDidLoad()
    collectionView.delegate = self
    collectionView.dataSource = self
    imagePicker.delegate = self


// Button used to activate the UIImagePickerController
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) 
    imagePicker.allowsEditing = false
    imagePicker.sourceType = .photoLibrary
    present(imagePicker, animated: true)



func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 
    if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage 
        photoArray.append(pickedImage)
        picker.dismiss(animated: true, completion: nil)
        collectionView.reloadData()
    
    


// MARK: - collectionView DataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return photoArray.count


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! Cell
    cell.photoImageView.image = photoArray[indexPath.row]
    return cell

我在网上找到了这段代码,但我不知道“return documentDirectory[0]”输出什么。

func documentDirectory() -> String 
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, 
.userDomainMask, true)
    return documentDirectory[0]

【问题讨论】:

【参考方案1】:

这为您提供了字符串形式的路径,您可以使用它来保存从 UIImagePickerController 中选取的图像。

保存图片

let data = UIImagePNGRepresentation(pickedImage)!
do 
  try data.write(to: URL(string: "\(self.documentDirectory())/nameImage")!, options: .atomic)
 catch let error as NSError 
  print(error.localizedDescription)

获取图片

do 
   let readData = try Data(contentsOf: URL(string: "\(self.documentDirectory())/nameImage")!)
   let retreivedImage = UIImage(data: readData)
 catch let error as NSError 
  print(error.localizedDescription)

【讨论】:

在哪里插入保存图像和获取图像方法?我尝试了 func imagePickerController() 和 func documentDirectory() 您可以在选择图像后在 func imagePickerController() 中使用保存图像。此图像将保存在您手机上的文档中。并在 func viewDidLoad() 中使用文档中的 readImage,使用“photoArray.append(retreivedImage)”。当您第二次访问该应用时,照片将自动加载。

以上是关于从 iOS 文件系统中的 UIImagePickerController 保存和删除图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使用 NSKeyedArchiver 将已写入文件系统的 Flutter 中的文件作为字符串读取?

iOS中获取系统相册中的图片

使用 cordova 文件传输将图像/视频保存到 IOS 中的画廊

操作系统(4) -- 文件管理、IO管理

Linux文件系统---用户与内核的交互接口

流星cfs:文件系统从ios上传到服务器导致零字节文件