You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:46:04