【发布时间】:2015-09-11 04:01:16
【问题描述】:
我正在构建一个共享扩展程序,我需要将大照片缩放到更小的尺寸,然后才能上传到我的共享扩展程序中。
我正在使用来自How to resize an UIImage while maintaining its Aspect Ratio 的代码:
- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
CGSize scaledSize = newSize;
float scaleFactor = 1.0;
if( image.size.width > image.size.height ) {
scaleFactor = image.size.width / image.size.height;
scaledSize.width = newSize.width;
scaledSize.height = newSize.height / scaleFactor;
}
else {
scaleFactor = image.size.height / image.size.width;
scaledSize.height = newSize.height;
scaledSize.width = newSize.width / scaleFactor;
}
UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
[image drawInRect:scaledImageRect];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
但是,当我尝试缩小照片库中的大图像(在本例中为 5415x3610,使用 DSLR 拍摄)时,由于内存压力,它会崩溃。虽然这似乎是一个极端情况,但我的应用高度依赖 iOS 共享扩展来共享来自非 iPhone 来源的照片,例如来自相机的高分辨率照片。
显然,不按比例上传 20MP/8MB 的照片是不可行的。如何使用更少的内存来缩减它?
【问题讨论】:
-
除非您的 newSize 是正方形,否则存在算法问题:您只查看原始比率
if( image.size.width > image.size.height )而不是目标比率 (newSize.width / newSize.height),因此您可能会增加宽度或高度。这段代码的来源应该是固定的或被否决的。
标签: ios memory-management uigraphicscontext ios8-share-extension memory-pressure