Objective-C libjpeg-turbo 封装器(JPEG 图像编解码器,它使用 SIMD 指令(MMX、SSE2、NEON)来加速 x86、x86-64 和 ARM 系统上的基线 JPEG 压缩和解压缩)。 DFJPEGTurbo
使用 libjpeg-turbo
版本 1.4.1,现在包括 arm64 支持。
DFJPEGTurbo
支持 基线 和渐进式 JPEG 的解压缩。
NSData *jpegData;
UIImage *image = [DFJPEGTurboImageDecoder imageWithData:data];
NSData *jpegData;
// Scale must be implemented by libjpeg-turbo which supports only several scaling factors (1/1, 1/2, 1/4 etc).
DFJPEGScale scale = DFJPEGScaleMake(1, 2); // 0.5 scale
UIImage *image = [DFJPEGTurboImageDecoder imageWithData:jpegData orientation:UIImageOrientationDown scale:scale];
在旧的基于 ARM 的系统(iPhone 4S、iPhone 5C)上的基准测试表明,libjpeg-turbo 相对于原生的 CGContextDrawImage 提供了非常明显的性能提升。然而,在较新的系统(iPhone 6)上,libjpeg-turbo 的表现不佳。基准测试实现可在项目目录中的 Demo/DFJPEGTurboBenchmark 中查看。
输入图像 | CGContextDrawImage | libjpeg-turbo |
---|---|---|
1024x768,0.3 压缩质量 | 10.51 毫秒 | 9.75 毫秒 |
1024x768,0.5 压缩质量 | 10.56 毫秒 | 10.15 毫秒 |
1024x768,0.7 压缩质量 | 10.14 毫秒 | 11.61 毫秒 |
1024x768,0.9 压缩质量 | 10.13 毫秒 | 12.44 毫秒 |
2048x1536,0.3 压缩质量 | 41.60 毫秒 | 36.98 毫秒 |
2048x1536,0.5 压缩质量 | 33.46 毫秒 | 40.56 毫秒 |
2048x1536,0.7 压缩质量 | 33.85 毫秒 | 45.53 毫秒 |
2048x1536,0.9 压缩质量 | 34.79 毫秒 | 52.60 毫秒 |
输入图像 | CGContextDrawImage | DFJPEGTurbo |
---|---|---|
1024x768,0.3 压缩质量 | 42.47 毫秒 | 22.26 毫秒 |
1024x768,0.5 压缩质量 | 40.75 毫秒 | 23.28 毫秒 |
1024x768,0.7 压缩质量 | 40.51 毫秒 | 26.11 毫秒 |
1024x768,0.9 压缩质量 | 39.82 毫秒 | 29.77 毫秒 |
2048x1536,0.3 压缩质量 | 130.72 毫秒 | 81.95 毫秒 |
2048x1536,0.5 压缩质量 | 129.83 毫秒 | 86.50 毫秒 |
2048x1536,0.7 压缩质量 | 130.42 毫秒 | 98.17 毫秒 |
2048x1536,0.9 压缩质量 | 130.03 毫秒 | 106.18 毫秒 |
DFJPEGTurbo 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。