从照片库中删除图像

Posted

技术标签:

【中文标题】从照片库中删除图像【英文标题】:Delete image from Photo Gallery 【发布时间】:2018-02-13 12:21:05 【问题描述】:

在我的应用程序中,我有一个功能可以将图像保存到在照片库中创建的自定义收藏相册中:

func save(image: UIImage) 
    if assetCollection == nil 
        return
    
    phphotoLibrary.shared().performChanges(
        let assetChangeRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
        let assetPlaceHolder = assetChangeRequest.placeholderForCreatedAsset
        let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection)
        let enumeration: NSArray = [assetPlaceHolder!]
        albumChangeRequest!.addAssets(enumeration)
    , completionHandler: nil)

UIImages 由用户在以前的 VC 中创建。此外,它们被保存到文档目录中,然后在我的应用程序中显示在单独 VC 的集合视图中。

稍后用户可以选择所需的照片,然后在新的 VC 中显示并通过单击 Trash TabBarButton 将其删除。当按下按钮时,图像会从文档目录中删除,因此它也会从集合视图中消失。

我想要实现的是同时从照片库中删除这张照片。因此,当用户点击垃圾箱按钮时,也会从文档目录和照片库中删除选定的照片。

到目前为止,我所取得的成就 - 创建了获取图像 URL 并根据该 URL 删除项目的函数,就像我对 Documents Directory 所做的那样:

func deleteSelectedPhotoFromGallery() 
    PHPhotoLibrary.shared().performChanges(
        let imageAssetToDelete = PHAsset.fetchAssets(withALAssetURLs: self.loadURL() as! [URL], options: nil)
        PHAssetChangeRequest.deleteAssets(imageAssetToDelete)
    )

编辑:这就是我获取 URL 的方式:

func loadURL() -> [NSURL?]? 
    let retrievedData = UserDefaults.standard.object(forKey: DefaultKeys.imagesURL.rawValue) as? [String]
    return retrievedData?.map  NSURL(string: $0) 

问题:

fetchAssets(withALAssetURLs) - 将被弃用,改用什么? 如何获取保存到 PhotoLibrary 的图片 URL?

基本上,我需要一些方法来从照片库中删除之前保存的图像。我想知道您是否可以在保存时以某种方式检测图像 URL 或路径,然后将其路径存储到 UserDefaults 中,然后使用它的路径或 URL 将其删除。

之前有关于这个问题的问题,但他们使用 ImagePicker 来检测图像 URL 以及用 objc 编写的位置,但我想在不使用 ImagePicker 的情况下快速找到解决方案。

谢谢。

【问题讨论】:

使用占位符的localIdentifier 【参考方案1】:

fetchAssets(withALAssetURLs) - 将被弃用,改用什么? 如何获取保存到 PhotoLibrary 的图片 URL?

你没有。这就是它被弃用的原因!您将获得资产的 localIdentifier。这使您可以访问资产并在以后将其删除。

您的完成处理程序是空的。那就是问题所在。编写完成处理程序并从占位符中获取本地标识符。

【讨论】:

感谢您的回复!为了让我更清楚,我应该使用这个删除照片 - fetchAssets(withLocalIdentifiers:...) 但在我应该有本地标识符之前。能否请您提供有关如何获取它的更多详细信息? 我确实提供了有关如何获取它的详细信息。阅读我的答案。您在创建资产时从占位符中获取它。 对不起,我的意思是代码本身。如何从占位符获取本地标识符?我是 swift 新手... UPD:找到了! assetPlaceHolder?.localIdentifier - 就是这样。使用它,您可以从任何地方删除照片。我会将您的答案标记为已接受。非常感谢您的帮助!

以上是关于从照片库中删除图像的主要内容,如果未能解决你的问题,请参考以下文章

从照片库中删除图像

如何在ios中删除照片的图像?

如何在 PHAsset 中添加图像并将其从照片库中删除?

如何从 iPhone 照片库中删除照片

如何以编程方式从ios中的照片中删除图像?

从 Swift 中的相机胶卷连拍中删除单张照片