Ton*_*ony 5 image-processing ios
我有代码以非常差的质量重新创建高质量的图像,但我对我看到的结果感到有点困惑.代码在这里:
NSData *compressedData = UIImageJPEGRepresentation(bigImage,0);
NSLog(@"compressedData length = %d", [compressedData length]);
self.currentImage = [UIImage imageWithData:compressedData];
NSData *dataAfterCompression = UIImageJPEGRepresentation(self.currentImage,1);
NSLog(@"dataAfterCompression length = %d", [dataAfterCompression length]);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
2012-01-02 02:47:05.615 MyApp[349:707] compressedData length = 32671
2012-01-02 02:47:06.143 MyApp[349:707] dataAfterCompression length = 251144
Run Code Online (Sandbox Code Playgroud)
为什么用如此大的图像创建具有低质量数据的新图像?
输入to UIImageJPEGRepresentation是2-D像素数组,而不是创建该2-D数组的压缩数据.(该数组可能根本不是来自压缩数据!) UIImageJPEGRepresentation不知道图像来自何处,并且它没有任何关于其输入"质量"的概念.它只是知道你想要它非常努力地使输出变小(当compressionQuality为零时)或者你想要它非常努力地使输出准确(当它compressionQuality是一个时).
JPEG压缩算法具有一些可调参数.该compressionQuality值选择一组参数.当您设置compressionQuality为1时,压缩器使用一组参数,这些参数几乎不会损失输入数据的准确性,无论输入数据实际是什么.对于任何输入数据,这些参数导致精度损失很小.权衡是这些参数也导致非常小的压缩.然后压缩机不会想"嗯,我应该尝试使用其他参数,看看我是否通过更好的压缩得到了相同的精度".如果这就是你想要的,你必须自己做.