2016-08-23 112 views
0

我想获取我的PHAsset的缩略图。我已经从照片库中提取PHAsset,现在想要获取缩略图。从PHAsset获取缩略图

你能帮我Objective-C吗?

谢谢!

回答

1

PHImageManagerClass有方法:

- requestImageForAsset:targetSize:contentMode:options:resultHandler: 
+0

我得到这个错误“终止应用程序由于未捕获的异常‘NSInvalidArgumentException’,原因是:“ - [PHAssetCollection isCloudSharedAsset ]:无法识别的选择器发送到实例“ – Peter

1
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; 
    options.resizeMode = PHImageRequestOptionsResizeModeExact; 

    NSInteger retinaMultiplier = [UIScreen mainScreen].scale; 
    CGSize retinaSquare = CGSizeMake(imageView.bounds.size.width * retinaMultiplier, imageView.bounds.size.height * retinaMultiplier); 

    [[PHImageManager defaultManager] 
      requestImageForAsset:(PHAsset *)_asset 
         targetSize:retinaSquare 
         contentMode:PHImageContentModeAspectFill 
          options:options 
        resultHandler:^(UIImage *result, NSDictionary *info) { 

        imageView.image =[UIImage imageWithCGImage:result.CGImage scale:retinaMultiplier orientation:result.imageOrientation]; 

    }]; 

我从How to fetch squared thumbnails from PHImageManager?

+0

我得到这个错误”终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [PHAssetCollection isCloudSharedAsset]:无法识别的选择器发送到实例“ – Peter

0

这个答案下面是斯威夫特4一个完整的答案,显示针对它的函数调用&。此外,请确保您的plist中设置了照片隐私标志。

import Photos 

func requestImage(for asset: PHAsset, 
        targetSize: CGSize, 
        contentMode: PHImageContentMode, 
        completionHandler: @escaping (UIImage?) ->()) { 
    let imageManager = PHImageManager() 
    imageManager.requestImage(for: asset, 
           targetSize: targetSize, 
           contentMode: contentMode, 
           options: nil) { (image, _) in 
            completionHandler(image) 
    } 
} 

let asset = // your existing PHAsset 
let targetSize = CGSize(width: 100, height: 100) 
let contentModel = PHImageContentMode.aspectFit 
requestImage(for: asset, targetSize: targetSize, contentMode: contentModel, completionHandler: { image in 
    // Do something with your image if it exists 
}) 
0

万一有人正在寻找一个快速的解决方案,这里是一个扩展:

extension PHAsset { 
    var thumbnailImage : UIImage { 
     get { 
      let manager = PHImageManager.default() 
      let option = PHImageRequestOptions() 
      var thumbnail = UIImage() 
      option.isSynchronous = true 
      manager.requestImage(for: self, targetSize: CGSize(width: 300, height: 300), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in 
       thumbnail = result! 
      }) 
      return thumbnail 
     } 
    } 
}