如何通过YangMingShan库从选中的UIImage获取图片名称?
解决YangMingShan选中图片后获取文件名的问题
直接从UIImage里拿文件名是行不通的——UIImage只存储图片的像素数据,不包含原图片的文件名这类元信息。要获取文件名,得换用YangMingShan提供的返回PHAsset的代理方法,通过PHAsset去读取原图片的文件名:
步骤1:替换代理方法
把原来返回UIImage的代理方法,换成返回PHAsset数组的版本:
func photoPickerViewController(_ picker: YMSPhotoPickerViewController!, didFinishPickingAssets assets: [Any]!) { // 处理选中的assets }
步骤2:从PHAsset中获取文件名
有两种可靠的方式获取文件名:
方式一:通过PHAssetResource读取原始文件名
func photoPickerViewController(_ picker: YMSPhotoPickerViewController!, didFinishPickingAssets assets: [Any]!) { guard let asset = assets.first as? PHAsset else { return } // 获取asset对应的资源列表 let resources = PHAssetResource.assetResources(for: asset) if let firstResource = resources.first { // originalFilename就是原图片的文件名 let imageName = firstResource.originalFilename print("选中的图片名称:\(imageName)") // 这里可以把imageName用于你的业务逻辑 } }
方式二:通过请求图片数据时的info字典获取
func photoPickerViewController(_ picker: YMSPhotoPickerViewController!, didFinishPickingAssets assets: [Any]!) { guard let asset = assets.first as? PHAsset else { return } PHImageManager.default().requestImageDataAndOrientation(for: asset, options: nil) { [weak self] imageData, dataUTI, orientation, info in guard let fileURL = info?[PHImageFileURLKey] as? URL else { return } // 从URL中提取文件名 let imageName = fileURL.lastPathComponent print("选中的图片名称:\(imageName)") // 后续业务处理 } }
注意事项
- 确保你的项目已经请求了相册访问权限,否则无法读取PHAsset的相关信息;
- 如果需要同时获取UIImage和文件名,可以在拿到PHAsset后,再调用PHImageManager的方法去请求图片数据。
内容的提问来源于stack exchange,提问作者Jenish
相关产品推荐
相关产品推荐

