你能从 IOS 中的 assetURL 获取图像文件名吗?

Can you get image file name from assetURL in IOS?

我正在使用 ALAssetsLibrary 将图像保存到照片库并打印出图像文件的 url。我注意到照片以 IMG_####.jpg 格式保存到 ios 设备,其中 #### 是一些数字。我想获取刚刚保存的图像的文件名。无论如何要从 url?

中获取此 IMG_####.jpg 文件名
assetLib.writeImage(toSavedPhotosAlbum: imageToSave.cgImage, orientation: ALAssetOrientation(rawValue: imageToSave.imageOrientation.rawValue)!, completionBlock: {(url,error) -> Void in
            print("image url: \(url)")

输出

image url: Optional(assets-library://asset/asset.JPG?id=56963951-1CE3-4A1A-B693-804899C79BA5&ext=JPG)

在这个 link 的评论中有人在做我想要的,但是我不太熟悉 objective C 并且不使用 imagePickerController。如果有人可以向我解释如何在没有 imagePickerController 的 Swift 中执行此操作,那就太棒了。

http://ootips.org/yonat/how-to-set-the-image-name-when-saving-to-the-camera-roll/

重要的一点是,您不能使用资产 url 中显示的图像名称做任何事情。

您必须存储 asset-url 而不是从照片库中检索图像。

我想知道是否还有其他人有兴趣做同样的事情。感谢我在问题中发布的 link 我刚刚将其翻译为 Swift。

    let assetLib = ALAssetsLibrary()
    //Save image get access to the url in completion handler    
    assetLib.writeImage(toSavedPhotosAlbum: imageToSave.cgImage, orientation: ALAssetOrientation(rawValue: imageToSave.imageOrientation.rawValue)!, completionBlock: {(url,error) -> Void in
                        let phAsset = PHAsset.fetchAssets(withALAssetURLs: [url!], options: nil)
                        let lastPhAsset = phAsset.lastObject
                        let asset = assetLib.asset(for: url, resultBlock: {(asset) -> Void in
                            //print("Asset Success!")
                            let imageRequestOptions = PHImageRequestOptions()
                            imageRequestOptions.isSynchronous = true
                            PHImageManager.default().requestImageData(for: lastPhAsset!, options: imageRequestOptions, resultHandler: {
                                (data,string,orientation,diction) -> Void in


                                let filename = diction![AnyHashable("PHImageFileURLKey")]!
                                // You should have the correct filename here.
                                //print("Filename = \(filename)")
                            })

                        }, failureBlock: {(error) -> Void in
                            print("Failed to retrieve a asset from url.")
                            return
                        })


  })