iOS 照片库 - 如何获取真实的文件名?

Posted

技术标签:

【中文标题】iOS 照片库 - 如何获取真实的文件名?【英文标题】:iOS Photos library - how to get the REAL filename? 【发布时间】:2019-03-27 19:46:11 【问题描述】:

我正在为此寻找 Swift 或 Objective C 解决方案。在这里,我展示了我使用 swift 的示例。

我在 ios 上使用 Photos 框架并且很难找到 REAL 文件名而不是 IMG_4227.JPG 类型。我的图像名称实际上是myawesomefilename.jpg,如果我从我的 iPhone 空投或传输到保管箱图像,我会看到这个文件名。但是当我使用 Photos 框架时,我得到的名称是 IMG_4227.JPG

应用商店有一个应用可以获取所有图片的真实文件名,所以肯定是可以的。我只是不知道怎么做。

这是我目前获取 IMG_4227.JPG 类型名称的方式:

func exifTapped(asset: PHAsset) 
        print("name: \(asset.value(forKey: "filename"))")

        getURL(ofPhotoWith: asset)  (url) in
            print("URL: \(url)")
            let data = NSData.init(contentsOf: url!)!
            if let imageSource = CGImageSourceCreateWithData(data, nil) 
                let imageProperties2 = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil)! as NSDictionary
                print("imageProperties2: ", imageProperties2)
            
        
    


    func getURL(ofPhotoWith mPhasset: PHAsset, completionHandler : @escaping ((_ responseURL : URL?) -> Void)) 

        if mPhasset.mediaType == .image 
            let options: PHContentEditingInputRequestOptions = PHContentEditingInputRequestOptions()
            options.isNetworkAccessAllowed = true
            options.canHandleAdjustmentData = (adjustmeta: PHAdjustmentData) -> Bool in
                return true
            
            mPhasset.requestContentEditingInput(with: options, completionHandler:  (contentEditingInput, info) in
                completionHandler(contentEditingInput!.fullSizeImageURL)
            )
         else if mPhasset.mediaType == .video 
            let options: PHVideoRequestOptions = PHVideoRequestOptions()
            options.version = .original
            options.isNetworkAccessAllowed = true
            PHImageManager.default().requestAVAsset(forVideo: mPhasset, options: options, resultHandler:  (asset, audioMix, info) in
                if let urlAsset = asset as? AVURLAsset 
                    let localVideoUrl = urlAsset.url
                    completionHandler(localVideoUrl)
                 else 
                    completionHandler(nil)
                
            )
        

    

编辑: 没有任何重复的解决方案与我已有的解决方案有任何不同,它们都给出了 IMG_4227.JPG 类型名称而不是真实名称。所以这不是重复的。

【问题讨论】:

没有一个重复的解决方案与我已有的解决方案有任何不同,它们都给出了 IMG_4227.JPG 类型名称而不是真实名称。所以这不是重复的。 @matt 没有一个重复的解决方案与我已有的解决方案有任何不同,它们都给出了 IMG_4227.JPG 类型名称而不是真实名称。所以这不是重复的。 【参考方案1】:

我想通了。

let resources = PHAssetResource.assetResources(for: asset)
print("Filename: \((resources.first as! PHAssetResource).originalFilename)")

【讨论】:

以上是关于iOS 照片库 - 如何获取真实的文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何不从照片库 iOS 中获取屏幕截图

如何使用 URL 路径从 iOS 的照片库中获取图像?

IOS 照片库获取给定照片的相册名称

如何从 iOS 中两个日期范围内的照片库中获取图像?

如何从 iOS 照片库中获取图像并在 UIWebView 中显示

如何使用 Photos 框架从 iOS 上的相机胶卷中获取最新照片?