簡體   English   中英

如何從PHImageFileURLKey獲取圖像

[英]how to get image from PHImageFileURLKey

伙計們

我通過使用以下代碼從照片獲取圖像URL。

func getAllImagesURL() -> [URL]
    {
       var arr_URL = [URL]()
        for index in 0..<fetchResult.count
        {
            imgManager.requestImageData(for: fetchResult.object(at: index) as PHAsset, options: requestOptions, resultHandler: { (imagedata, dataUTI, orientation, info) in
                if let fileName = (info?["PHImageFileURLKey"] as? URL)
                {
                    //do sth with file name
                    arr_URL.append(fileName)
                }
            })
        }
        return arr_URL
    }

通過使用此URL密鑰,我想從照片中獲取圖像。我搜索並找到了下面的代碼,但仍然無法正常工作。

func getImage(assetUrl: URL) -> UIImage?  {
        let asset = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)

        guard let result = asset.firstObject else {
            return nil
        }
        var assetImage: UIImage?
        let options = PHImageRequestOptions()
        options.isSynchronous = true
        PHImageManager.default().requestImage(for: result, targetSize: UIScreen.main.bounds.size, contentMode: PHImageContentMode.aspectFill, options: options) { image, info in
            assetImage = image
        }

        return assetImage
    }

它返回nil,所以請幫助我。如何使用URL密鑰獲取圖像。

提前致謝..

getImage(assetUrl: URL) -> UIImage? 方法,您正在使用

    let asset = PHAsset.fetchAssets(withALAssetURLs: [assetUrl], options: nil)

如果您正在使用AssetsLibrary,則assetUrl是應該從中獲取的url。 從iOS 9.0起不推薦使用此庫。 我們必須改為使用照片庫。

順便說一句,您已經在getAllImageURLs()方法中獲取了所有圖像(數據)。 只需轉換該方法即可獲取所有圖像並根據需要處理這些圖像。 您可以使用以下方法獲取所有圖像。

func getAllImages() -> [UIImage]?
{
    let imgManager = PHImageManager.default()
    let requestOptions = PHImageRequestOptions()
    requestOptions.isSynchronous = true

    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate", ascending: true)]

    let fetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)

    var allImages = [UIImage]()

    for index in 0..<fetchResult.count
    {
        let asset = fetchResult.object(at: index) as PHAsset
        imgManager.requestImage(for: asset, targetSize: UIScreen.main.bounds.size, contentMode: .aspectFill, options: requestOptions, resultHandler: { (uiimage, info) in
            allImages.append(uiimage!)
        })
    }

    return allImages
}

注意:根據您的要求調整此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM