Ios 尝试裁剪非常大的图像时共享扩展崩溃

Ios 尝试裁剪非常大的图像时共享扩展崩溃,ios,objective-c,share-extension,Ios,Objective C,Share Extension,我正在使用TOCropViewController裁剪图像。这在主应用程序中运行良好。问题是,当我尝试在共享扩展中使用此库时,它不起作用。我的意思是,当我试图裁剪一张非常大的图像(在iPhone摄像头上拍摄的图像)时,扩展正在崩溃。根据库开发人员的说法,这可能是因为试图裁剪时内存问题。因此,我尝试缩小图像的比例,然后再将其传递给图像裁剪器。现在我面临的问题是,这种缩小尺寸的方法只适用于少数几张图片,而其他图片则会崩溃。不知道为什么会这样。我用于缩小规模的代码是: - (UIImage *)ima

我正在使用TOCropViewController裁剪图像。这在主应用程序中运行良好。问题是,当我尝试在共享扩展中使用此库时,它不起作用。我的意思是,当我试图裁剪一张非常大的图像(在iPhone摄像头上拍摄的图像)时,扩展正在崩溃。根据库开发人员的说法,这可能是因为试图裁剪时内存问题。因此,我尝试缩小图像的比例,然后再将其传递给图像裁剪器。现在我面临的问题是,这种缩小尺寸的方法只适用于少数几张图片,而其他图片则会崩溃。不知道为什么会这样。我用于缩小规模的代码是:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize isAspectRatio:(BOOL)aspect {
    if (!image) {
        return nil;
    }
    CGFloat originRatio = image.size.width / image.size.height;
    CGFloat newRatio = newSize.width / newSize.height;

    CGSize sz;

    if (!aspect) {
        sz = newSize;
    }else {
        if (originRatio < newRatio) {
            sz.height = newSize.height;
            sz.width = newSize.height * originRatio;
        }else {
            sz.width = newSize.width;
            sz.height = newSize.width / originRatio;
        }
    }
    CGFloat scale = 1.0;
    sz.width /= scale;
    sz.height /= scale;
    UIGraphicsBeginImageContextWithOptions(sz, NO, scale);
    [image drawInRect:CGRectMake(0, 0, sz.width, sz.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
-(UIImage*)图像带图像:(UIImage*)图像缩放大小:(CGSize)新闻大小是光谱:(BOOL)方面{
如果(!图像){
返回零;
}
CGFloat originRatio=image.size.width/image.size.height;
CGFloat newRatio=newSize.width/newSize.height;
cgsz;
如果(!方面){
sz=新闻化;
}否则{
if(原始比率<新比率){
sz.height=newSize.height;
sz.width=newSize.height*originRatio;
}否则{
sz.width=newSize.width;
sz.height=newSize.width/originRatio;
}
}
CGFloat比例=1.0;
sz.宽度/=刻度;
sz.高度/=刻度;
UIGraphicsBeginImageContextWithOptions(sz、NO、scale);
[image drawInRect:CGRectMake(0,0,sz.宽度,sz.高度)];
UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsSendImageContext();
返回新图像;
}
有人能建议一种方法来缩小共享扩展中的图像以避免崩溃吗


提前感谢。

您可以尝试使用苹果的推荐:


您是否能够在崩溃发生时发布控制台日志输出?这应该告诉你这是不是由于内存限制导致的崩溃,或者是你的代码在特定的图像中遇到了问题。这肯定是内存问题
// Downsampling large images for display at smaller size 
func downsample(imageAt imageURL: URL, to pointSize: CGSize, scale: CGFloat) -> UIImage {  
     let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary 

     let imageSource = CGImageSourceCreateWithURL(imageURL as CFURL, imageSourceOptions)! 

     let maxDimensionInPixels = max(pointSize.width, pointSize.height) * scale  
     let downsampleOptions =  [kCGImageSourceCreateThumbnailFromImageAlways: true,
     kCGImageSourceShouldCacheImmediately: true, 
     kCGImageSourceCreateThumbnailWithTransform: true,
     kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary   
     let downsampledImage =   CGImageSourceCreateThumbnailAtIndex(imageSource, 0, downsampleOptions)!  
     return UIImage(cgImage: downsampledImage) 
}