【问题标题】:Saving hi-res images to photo album将高分辨率图像保存到相册
【发布时间】:2010-10-20 13:39:26
【问题描述】:
我正在开发一个简单的图像处理应用程序,我在我的测试单元 (iPhone 3G) 上遇到了一个问题,即通常任何超过 1024x1024 像素的图像都会导致应用程序在保存时崩溃。
我的应用程序遵循的过程:
用户通过 UIImagePicker 选择图像
创建所选图像的工作副本并将其大小调整为视图边界(例如 320x480)以提高性能。
用户对工作副本进行图像处理并按下保存
对原始全分辨率图像进行相同的处理,然后保存到相册中。
如果图像是 1024x1024 的区域,一切都很好,如果太大,应用程序会崩溃没有任何内存警告。
在通过 stackoverflow 搜索后,似乎 Apple 建议不要超过 1024x1024,但是我发现同一 iPhone 3G 上的 PhotoShop Express 应用程序能够以原始高分辨率(例如 1534x2034)保存图像.
有人能给我一些关于如何像 PhotoShop Express 一样将高分辨率图像保存到相册的想法吗?
谢谢。
【问题讨论】:
标签:
iphone
image
image-processing
uiimage
【解决方案1】:
即使没有内存警告,我也认为这是内存问题。我们需要有关您的崩溃的更多信息才能确定。你是怎么保存的?您使用的是 ALAssetsLibrary 还是 UIImageWriteToSavedPhotosAlbum?请注意,后者具有适用于 CGImageRef 或 NSData 的方法。值得尝试所有适用的方法进行比较。
【解决方案2】:
我想分享一下我是如何处理这个问题的……
- 从照片库加载图像。 [imginfo objectForKey:@"UIImagePickerControllerOriginalImage"];
- 将“工作副本”调整为适合视图边界的大小。
- 在保存时,我有一个方法可以确定它在哪个型号的 iOS 设备上运行,并返回一个维度的最大分辨率。对于 iPhone 3G,我使用了 1600 像素。
- 再次加载原始图像 (objectForKey:@"UIImagePickerControllerOriginalImage"];) 然后调整大小以适应 1600 像素的范围(在本例中),同时保持纵横比。
不理想,但至少这可以防止崩溃,并允许使用较新硬件(例如 3G 或 4)的个人以更高分辨率保存。