gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:10:30 25 4
gpt4 key购买 nike

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

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
}

所有这些在模拟器中都运行良好。然而,在设备上,获取 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)!

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

关于ios - 如何从 Swift 中的 ALAssetRepresentation 获取低分辨率图像或缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32190423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com