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