在下面的代码中,我崩溃了CGImageDestinationFinalize()行。 CGImage是一张大型JPG照片。如果我使用较小的JPG,它工作正常。但是超过10MB的任何设备都会因“内存不足”而崩溃。
我认为CGImageDestination *方法正在对写入进行流式处理,但我必须做一些保留数据的错误。
编写大型JPG时是否应该使用另一个API调用?
BOOL SKImageWriteToDisk(CGImageRef image, NSURL *url, SKImageProfile profile, CGFloat dpi)
{
CFStringRef type = profile == SKmageProfileCompressed ? kUTTypeJPEG : kUTTypePNG;
CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, type, 1, NULL);
if (!destination) {
return NO;
}
NSMutableDictionary *properties =
[@{
(id) kCGImagePropertyDPIHeight: @(dpi),
(id) kCGImagePropertyDPIWidth: @(dpi)
} mutableCopy];
if (profile == SKImageProfileCompressed) {
properties[(id) kCGImageDestinationLossyCompressionQuality] = @(0.8f);
}
CGImageDestinationAddImage(destination, image, (__bridge CFDictionaryRef)properties);
BOOL finalizeSuccess = CGImageDestinationFinalize(destination); // crash!
CFRelease(destination);
return finalizeSuccess;
}