gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:20:28 24 4
gpt4 key购买 nike

我的主要问题是我需要获取 ALAsset 对象的缩略图。

我尝试了很多解决方案并搜索了数天的堆栈溢出,由于这些限制,我发现的所有解决方案都不适合我:

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

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

#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 调整大小的方法,但是:

  • Assets url 不能在 CGImageSourceCreateWithURL: 中使用;
  • 我无法从 ALAsset 中提取信息或 ALAssetRepresentation一个CGDataProviderRefCGImageSourceCreateWithDataProvider: 一起使用;
  • CGImageSourceCreateWithData:需要我将全分辨率或全屏 Assets 存储在内存中才能工作。

我错过了什么吗?

是否有另一种方法可以从 ALAsset 获取自定义缩略图?或 ALAssetRepresentation我错过了什么?

提前致谢。

最佳答案

您可以使用 CGImageSourceCreateThumbnailAtIndex 从可能较大的图像源创建小图像。您可以使用 ALAssetRepresentationgetBytes:fromOffset:length:error: 方法从磁盘加载图像,并使用它来创建 CGImageSourceRef。

然后你只需要将 kCGImageSourceThumbnailMaxPixelSizekCGImageSourceCreateThumbnailFromImageAlways 选项与你创建的图像源一起传递给 CGImageSourceCreateThumbnailAtIndex,它将创建为您提供较小的版本,而无需将大版本加载到内存中。

我写了一个blog postgist充分充实了这项技术。

关于ios - 从 ALAssetRepresentation 生成自定义缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765340/

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