Uno*_*ome 5 ios alassetslibrary swift
我正在使用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
}
Run Code Online (Sandbox Code Playgroud)
所有这一切在模拟器中都很有效.但是在设备上,获得fullResolutionImage()证明是设备上的内存密集型并导致崩溃.我认为这很有意义,所有加载到内存中的数十个高分辨率图像都是一个糟糕的想法,所以我想缩小质量,只显示图像的缩略图.唯一的问题是我找不到从中获取缩略图的简单方法AlAssetRepresentation.
我正在尝试使用CGImageSourceCreateThumbnailAtIndex创建缩略图,但对如何执行此操作非常困惑.
任何帮助深表感谢!
下面是一个示例(可能存在一些小的编译问题,具体取决于您使用的 Swift 版本):
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)!
Run Code Online (Sandbox Code Playgroud)
但请注意,您不应再使用 ALAssetsLibrary。它在 iOS 9 中已弃用。切换到 Photo Kit,欢迎来到现代世界!现在您可以调用PHImageManager.defaultManager().requestImageForAsset,它允许您提供targetSize所需图像的 a 。
| 归档时间: |
|
| 查看次数: |
4752 次 |
| 最近记录: |