从相机胶卷中获取所有图像并将其显示在滚动视图上?

Posted

技术标签:

【中文标题】从相机胶卷中获取所有图像并将其显示在滚动视图上?【英文标题】:get all the images from camera roll and show it on the scroll view? 【发布时间】:2015-12-31 05:31:50 【问题描述】:

目前我正在使用 ALasset 库来获取图像,但是当相机胶卷中的图像量很大时,我会遇到内存警告问题。

e.g assetsd died

这是我从相机胶卷中获取图像的代码

[self.assetsGroup enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:(NSMakeRange(0, self.assetsGroup.numberOfAssets - 1))] options:NSEnumerationReverse usingBlock:^(ALAsset result, NSUInteger index, BOOL stop)
             
                 if (result)
                 
                     UIImage *imageThumbnail;

                     imageThumbnail = [ImageHelper scaleAndRotateImage:[UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]] maxSize:500];

                     if(imageThumbnail)
                     
                         //Do your code here….
                     
             ];

我如何解决内存警告和资产死亡问题。 我还可以知道具有包含所有相机胶卷图像但滚动显示而不是网格形式的滚动视图的应用程序吗?这样我就可以得到它的参考。

提前致谢。

【问题讨论】:

如果你的目标是 ios8 以后 NS_CLASS_AVAILABLE_IOS(8_0) @interface PHAsset : PHObject 感谢您的建议.. 但我的 iOS 7 应用也兼容.. 我无法使用 PHAsset。 【参考方案1】:

我认为您必须使用带有row = self.assetsGroup.numberOfAssets - 1 的集合视图而不是滚动视图,并在集合视图单元格中编写如下代码

[self.assetsGroup enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:(NSMakeRange(0, indexPath.row))] options:NSEnumerationReverse usingBlock:^(ALAsset result, NSUInteger index, BOOL stop)
         
             if (result)
             
                 UIImage *imageThumbnail;

                 imageThumbnail = [ImageHelper scaleAndRotateImage:[UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]] maxSize:500];

                 if(imageThumbnail)
                 
                     //Do your code here….
                 
         ];

还有一件事,imageThumbnail 大小为几 kb,因此您可以将其存储(在本地目录中或使用 nsdata 在 coredata 中)并且在使用之前 enumerateAssetsAtIndexes 检查图像是否已存储,然后不要调用使用该存储的图像

【讨论】:

谢谢,但我必须全屏显示,所以这几个 kb 不起作用,即使我使用它,我的图像也会失真。 但我认为,当您当时使用网格视图时,您必须只显示缩略图图像,而对于全屏模式,我认为您不需要存储它只需使用 ` [NSIndexSet indexSetWithIndexesInRange:(NSMakeRange( 0, indexPath.row))]` 因为在全屏模式下你一次只需要一张图片

以上是关于从相机胶卷中获取所有图像并将其显示在滚动视图上?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中按名称/标识符从相机胶卷中获取图像

从相机胶卷和共享打开图像时,文件大小报告不同

将图像保存在相机胶卷中并获取资产 url

从相机胶卷中异步获取所有图像

从滚动视图添加多个图像

从相机胶卷导入图像并裁剪