ios – 从ALAssetRepresentation生成自定义缩略图

前端之家收集整理的这篇文章主要介绍了ios – 从ALAssetRepresentation生成自定义缩略图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的主要问题是我需要获取ALAsset对象的缩略图.

我尝试了很多解决方案,搜索堆栈溢出了几天,由于这些限制,我发现的所有解决方案对我来说都不工作:

>我不能使用默认的缩略图,因为它太少了;
>我不能使用全屏或全分辨率图像,因为我有很多图像在屏幕上;
>我不能使用UIImage或UIImageView来调整大小,因为这些负载
全分辨率图像
>我无法加载内存中的图像,我正在使用20Mpx的图像;
>我需要创建200×200 px版本的原始资源来加载屏幕;

这是我的代码的最后一次迭代:

#import <AssetsLibrary/ALAsset.h>
#import <ImageIO/ImageIO.h>   

// ...

ALAsset *asset;

// ...

ALAssetRepresentation *assetRepresentation = [asset defaultRepresentation];

NSDictionary *thumbnailOptions = [NSDictionary dictionaryWithObjectsAndKeys:
    (id)kcfBooleanTrue,kCGImageSourceCreateThumbnailWithTransform,(id)kcfBooleanTrue,kCGImageSourceCreateThumbnailFromImageAlways,(id)[NSNumber numberWithFloat:200],kCGImageSourceThumbnailMaxPixelSize,nil];

CGImageRef generatedThumbnail = [assetRepresentation CGImageWithOptions:thumbnailOptions];

UIImage *thumbnailImage = [UIImage imageWithCGImage:generatedThumbnail];

问题是,所产生的CGImageRef既不是通过方向变换的,也不是指定的最大像素大小;

我也试图找到一种使用CGImageSource调整大小的方法,但是:

>资源网址不能用于CGImageSourceCreateWithURL:
>我无法从ALAsset或ALAssetRepresentation中提取一个CGDataProviderRef以用于CGImageSourceCreateWithDataProvider:;
> CGImageSourceCreateWithData:要求我将fullResolution或全屏资源存储在内存中才能工作.

我错过了什么吗?

有没有另一种获取ALAsset或ALAssetRepresentation的缩略图方法,我失踪了?

提前致谢.

解决方法

您可以使用CGImageSourceCreateThumbnailAtIndex从潜在的大型图像源创建一个小图像.您可以使用ALAssetRepresentation的getBytes:fromOffset:length:error:method从磁盘加载映像,并使用它来创建CGImageSourceRef.

然后,您只需要将kCGImageSourceThumbnailMaxPixelSize和kCGImageSourceCreateThumbnailFromImageAlways选项传递给您创建的图像源的CGImageSourceCreateThumbnailAtIndex,并且它将为您创建一个较小的版本,而无需将庞大的版本加载到内存中.

我写了一个blog postgist这种技术充分发挥.

原文链接:https://www.f2er.com/iOS/337591.html

猜你在找的iOS相关文章