Ios 如何从Swift中的ALAssetRepresentation获取低分辨率图像或缩略图

Ios 如何从Swift中的ALAssetRepresentation获取低分辨率图像或缩略图,ios,swift,alassetslibrary,Ios,Swift,Alassetslibrary,我正在使用ALAssetLibrary从我正在制作的自定义视图的相机卷中获取图像。这样做很简单: library.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: { (group: ALAssetsGroup?, stop: UnsafeMutablePointer<ObjCBool>) in if group != nil {

我正在使用
ALAssetLibrary
从我正在制作的自定义视图的相机卷中获取图像。这样做很简单:

library.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: {
        (group: ALAssetsGroup?, stop: UnsafeMutablePointer<ObjCBool>) in
        if group != nil {
            group!.setAssetsFilter(ALAssetsFilter.allPhotos())
            var indexSet = NSIndexSet(indexesInRange: NSMakeRange(0, group!.numberOfAssets() - 1))
            group!.enumerateAssetsAtIndexes(indexSet, options: nil, usingBlock: {
                (result: ALAsset!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) in
                if (result != nil) {
                    var alAssetRapresentation: ALAssetRepresentation = result.defaultRepresentation()
                    var url = alAssetRapresentation.url()
                    var iRef = alAssetRapresentation.fullResolutionImage().takeUnretainedValue()
                    var image = UIImage(CGImage: iRef)
                }
            })
        }
        }) { (NSError) -> Void in
    }
library.enumerateGroupsWithTypes(AlasSetGroupType(AlasSetGroupSavedPhotos)),使用块:{
(组:ALASSETGROUP?,停止:不可设置指针)位于
如果组!=nil{
group!.setAssetFilter(alassetFilter.allPhotos())
var indexSet=NSIndexSet(indexesInRange:NSMakeRange(0,组!.numberOfAssets()-1))
group!.EnumerateAssetStatIndex(indexSet,选项:nil,usingBlock:{
(结果:ALAsset!,索引:Int,停止:UnsafeMutablePointer)位于
如果(结果!=零){
var alAssetRapresentation:ALAssetRepresentation=result.defaultRepresentation()
var url=alAssetRapresentation.url()
var iRef=alAssetRapresentation.fullResolutionImage().takeUnretainedValue()
var image=UIImage(CGImage:iRef)
}
})
}
}){(n错误)->在中无效
}
所有这些在模拟器中都非常有效。但是,在设备上,获取
fullResolutionImage()
证明是设备内存密集的一种方式,并会导致崩溃。我觉得这很有道理,几十张高分辨率图像全部加载到内存中是个糟糕的主意,所以我想缩小质量,只显示图像的缩略图。唯一的问题是,我发现没有简单的方法可以从
AlAssetRepresentation
获取缩略图

我正在尝试使用
CGImageSourceCreateThumbnailAtIndex
创建缩略图,但对如何创建缩略图感到非常困惑

非常感谢您的帮助

以下是一个示例(可能存在一些小的编译问题,具体取决于您使用的Swift版本):


但是,请注意,您不应该再使用AlassetLibrary。它在iOS 9中已被弃用。切换到相册,欢迎来到现代世界!现在您可以调用
PHImageManager.defaultManager().requestImageForAsset
,这允许您为所需图像提供
targetSize

!所以PhotoKit是我应该使用的:DAbsolutely。您希望以缩小的大小加载图像是值得称赞的,而CGImageSourceCreateThumbnailAtIndex是一种很好的方法,但在这种情况下,您不必这样做;照片包为你处理所有的事情。太棒了。那么我要用PhotoKit了,Thx!+1关于如何使用PhotoKit列举用户的照片,有什么好的材料可以指给我看吗?这就是我现在所处的位置。@matt我想知道比例,也就是说,CGImageSourceCreateTumbnailAtIndex在创建缩略图时是否会考虑正确的比例?缩放是否仅在创建UIImage时才起作用?CGImage没有缩放,@zumzum它只是一个位图。这就是我对如何获取
w
let src = CGImageSourceCreateWithURL(url, nil)
let scale = UIScreen.mainScreen().scale
let w = // desired display width, multiplied by scale
let d : [NSObject:AnyObject] = [
    kCGImageSourceShouldAllowFloat : true,
    kCGImageSourceCreateThumbnailWithTransform : true,
    kCGImageSourceCreateThumbnailFromImageAlways : true,
    kCGImageSourceThumbnailMaxPixelSize : w
]
let imref = CGImageSourceCreateThumbnailAtIndex(src, 0, d)
let im = UIImage(CGImage: imref, scale: scale, orientation: .Up)!