ios - 尝试裁剪非常大的图像时共享扩展程序崩溃

标签 ios objective-c share-extension

我正在使用 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;
}

谁能建议缩小共享扩展中的图像以避免崩溃的方法?

提前致谢。

最佳答案

您可以尝试使用来自 WWDC2018 的 Apple 推荐:

// 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) 
}

关于ios - 尝试裁剪非常大的图像时共享扩展程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966406/

相关文章:

ios - 模拟器和真实环境中的 Xcode 构建错误 "Command/usr/bin/codesign failed with exit code 1"

ios - 我的 UITextView 文本在编辑后跳转到右边(快速)

ios - Swift 4 向 URLRequest 完成处理程序添加参数

iphone - 如何在初始化后定义 UITableViewCell 样式?

iphone - 如何为 UILabel 的颜色设置动画?

ios - 支持共享表建议

iOS 共享扩展显示名称

iphone - 在容器 View 中翻转 subview

iphone - 如何检查视频文件是否大于2MB?