我有一个使用相机拍照的应用程序。拍完照片后,我会缩小来自相机的图像的大小。
运行减小图像大小的方法,使内存使用峰值从 21 MB 到 61 MB,有时接近 69 MB!
我已将@autoreleasepool 添加到此过程中涉及的每个方法中。情况有所改善,但没有我预期的那么好。我不希望缩小图像时内存使用量会跳跃 3 次,特别是因为正在生成的新图像更小。
这些是我尝试过的方法:
- (UIImage*)reduceImage:(UIImage *)image toSize:(CGSize)size {
@autoreleasepool {
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), image.CGImage);
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
}
并且
- (UIImage *)reduceImage:(UIImage *)image toSize:(CGSize)size {
@autoreleasepool {
UIGraphicsBeginImageContext(size);
[image drawInRect:rect];
UIImage * result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result;
}
}
这两者之间完全没有区别。
注意:原始图像为 3264x2448 像素 x 4 字节/像素 = 32MB,最终图像为 1136x640,即 2.9MB...将两个数字相加,您得到 35MB,而不是 70!
有没有办法在不使内存使用高峰达到平流层的情况下减小图像的大小?谢谢。
顺便说一句,出于好奇:有没有办法在不使用 Quartz 的情况下减小图像尺寸?