我尝试了很多解决方案,搜索堆栈溢出了几天,由于这些限制,我发现的所有解决方案对我来说都不工作:
>我不能使用默认的缩略图,因为它太少了;
>我不能使用全屏或全分辨率图像,因为我有很多图像在屏幕上;
>我不能使用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 post和gist这种技术充分发挥.
总结以上是内存溢出为你收集整理的ios – 从ALAssetRepresentation生成自定义缩略图全部内容,希望文章能够帮你解决ios – 从ALAssetRepresentation生成自定义缩略图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)