在iOS中处理大图像

时间:2013-04-16 17:19:45

标签: ios uiimage thumbnails photo cgbitmapcontext

我想让用户在不限制尺寸的情况下选择照片,然后进行编辑。

我的想法是创建与要编辑的屏幕大小相同的大照片缩略图,然后在编辑完成后,使用大照片进行与缩略图相同的编辑。 / p>

当我使用UIGraphicsBeginImageContext创建缩略图时,会导致内存问题。

我知道由于硬件限制很难直接编辑整个大图像,所以我想知道是否有一种方法可以将大图像下采样到2048 * 2048,而不会出现内存问题?

我发现有一个BitmapFactory类有一个inSampleSize选项,可以对Android平台中的照片进行下采样。如何在iOS上完成?

3 个答案:

答案 0 :(得分:9)

您需要使用UIImage来处理图像加载,CGImageCreateWithImageInRect实际上并未将图像加载到内存中,然后根据您想要的结果图像的大小创建位图上下文(因此这将是使用的记忆)。然后,您需要使用CGContextDrawImage使用{{1}}在目标上下文中使用{{1}}迭代多次从原始图像(这是图像数据的一部分加载到内存中)中绘制切片。

请参阅this sample code from Apple

答案 1 :(得分:1)

大图像不适合内存。因此将它们加载到内存中然后调整它们的大小不起作用。

要处理非常大的图像,您必须将它们平铺。已经有很多解决方案,例如,看看这是否可以解决您的问题:

https://github.com/dhoerl/PhotoScrollerNetwork

我实现了自己的自定义解决方案,但这是特定于我们的环境,我们已经有一个运行服务器端的图像管理器&我只能请求大图像的特定图块(制作服务器,它真的很酷)

平铺工作的原因是,基本上你只能将可见像素保留在内存中,并且没有那么多。当前不可见的所有切片都会被分解到磁盘高速缓存或闪存高速缓存中。

答案 2 :(得分:0)

看看Trevor Harmon的这项工作。它改善了我的应用程序的性能。我相信它也适合你。

https://github.com/coryalder/UIImage_Resize