我正在构建一个共享扩展,我需要将大照片缩放到更小的尺寸,然后再上传到我的共享扩展中。
我正在使用如何在保持其纵横比的同时调整 UIImage 大小的代码:
- (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 照片不是一种选择。如何以更少的内存使用来缩小它?