我在寫和IOS應用程序,我需要將CGImage另存爲JPEG文件。我控制壓縮的質量很重要。在Apple的Core Graphics/ImageIO框架中設置CGImageDestination中的JPEG壓縮質量時沒有效果
我寫了下面提供的功能。它的工作原理是,我得到一個JPEG文件。但是不管我爲壓縮設置什麼,我總是得到相同的結果。即文件大小始終相同。
誰能告訴我我做錯了什麼?
void CGImageWriteJPEG(CGImageRef image, NSString *path) {
NSMutableData * data = [[NSMutableData alloc] init];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)data, kUTTypeJPEG, 1, NULL);
float compression = .8; // What I put here does not seem to matter...
CFStringRef myKeys[1];
CFTypeRef myValues[1];
CFDictionaryRef myOptions = NULL;
myKeys[0] = kCGImageDestinationLossyCompressionQuality;
myValues[0] = CFNumberCreate(NULL, kCFNumberFloatType, &compression);
myOptions = CFDictionaryCreate(NULL, (const void **)myKeys, (const void **)myValues, 1,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CGImageDestinationSetProperties(destination, myOptions);
CGImageDestinationAddImage(destination, image, nil);
CGImageDestinationFinalize(destination);
[data writeToURL:[NSURL fileURLWithPath:path] atomically:NO];
CFRelease(destination);
CFRelease(myOptions);
CFRelease(myValues[0]);
}
更新的答案會'UIImageJPEGRepresentation'工作?多數民衆贊成我沒有問題使用。 – 2014-11-04 18:50:11
我唯一擔心的是將CGImage轉換爲UIImage的代價。我必須爲數千張圖像執行此操作,因此效率至關重要。你知道關於轉換成本的任何信息嗎? – user2771609 2014-11-04 19:13:45
我跑了一些測試,從CGImage到UIImage的轉換幾乎沒有成本,所以我想我會走這條路。謝謝您的幫助。我真的想知道我在做什麼CGImageDestination錯誤,但... – user2771609 2014-11-04 20:49:14