我已经使用AVFoundation
.
一旦我AVCaptureStillImageOutput
完成了它的captureStillImageAsynchronouslyFromConnection:completionHandler:
方法,我创建一个像这样的 NSData 对象:
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
获得NSData
对象后,我想旋转图像而不转换为UIImage
. 我发现我可以转换为 aCGImage
这样做。
获得 imageData 后,我开始转换为 CGImage 的过程,但我发现CGImageRef
最终结果比NSData
对象大 30 倍。
这是我用来转换为CGImage
from的代码NSData
:
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)(imageData));
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
如果我尝试缩小图像的大小,当图像是 1.5-2 兆NSLog
字节时,它会达到 30 兆字节!NSData
size_t imageSize = CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef);
NSLog(@"cgimage size = %zu",imageSize);
我想也许当你从 NSData 转到 CGImage 时,图像会解压缩,然后如果我转换回 NSData,它可能会回到正确的文件大小。
imageData = (NSData *) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
以上与对象NSData
相同。length
CGImageRef
如果我尝试保存图像,图像是无法打开的 30mb 图像。
我对使用 CGImage 完全陌生,所以我不确定我是否正在从 NSData 转换为 CGImage 并错误地转换回来,或者我是否需要调用一些方法来再次解压缩。
提前致谢,
将要