Библиотека iOS Фото - как получить РЕАЛЬНОЕ имя файла? - PullRequest
0 голосов
/ 27 марта 2019

Я ищу для этого либо решение Swift, либо Objective C.Здесь я показываю мой пример, используя swift.

Я использую платформу Photos для iOS и с трудом нахожу РЕАЛЬНОЕ имя файла вместо типа IMG_4227.JPG.Имя моего изображения на самом деле myawesomefilename.jpg, и я вижу это имя файла, если я отправляю в эфир изображение или перенесу изображение из моего iPhone в Dropbox.Но когда я использую инфраструктуру 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 вместо реального имени.Так что это не дубликат.

1 Ответ

0 голосов
/ 31 марта 2019

Я понял это.

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