我正在构建一个分享扩展,并需要在上传之前将大型照片缩放为较小的尺寸。
我正在使用来自如何调整大小并保持其宽高比的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的照片而不进行缩小是不可取的。如何以更少的内存使用量将其缩小?
if( image.size.width > image.size.height )
,而没有考虑目标比例(newSize.width / newSize.height
),因此可能会增加宽度或高度。这段代码的来源应该被修复或者被投票降低评分。 - undefined