2017-09-29 19 views
0

남자.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 
    } 

아무 것도 반환하지 않습니다. 제발 도와주세요. URL 키를 사용하여 이미지를 얻는 방법.

미리 감사 있습니다 .. getImage(assetUrl: URL) -> UIImage? 방법에서

+2

완성 처리기 또는 콜백에 대해 알아야한다고 생각합니다. 이에 대한 많은 질문이 있으므로 초보자 용 링크를 확인하십시오. https://thatthinginswift.com/completion-handlers/ – 3stud1ant3

답변

0

, 여기 assetUrl

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

를 사용하면이 AssetsLibrary를 사용하는 경우에서주의해야한다 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 
} 

참고 : 필요에 따라이 방법을 조정하십시오.

+0

장치의 이미지가 10,000이면 메모리 문제가 발생했는지 또는 이미지로드 성능이 양호한 지 여부를 알려주십시오. 제게 알려주십시오. –