11

我正在尝试从一个UIImage对象创建一个渐进式 jpeg,这是我的代码

NSMutableData *data = [NSMutableData data];

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: @"Library/Caches/test.jpg"];

CFURLRef url = CFURLCreateWithString(NULL, (CFStringRef)[NSString stringWithFormat:@"file://%@", path], NULL);
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG, 1, NULL);
CFRelease(url);

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                (__bridge id)kCFBooleanTrue, kCGImagePropertyJFIFIsProgressive,
                                nil];

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            [NSNumber numberWithFloat:.7], kCGImageDestinationLossyCompressionQuality,
                            jfifProperties, kCGImagePropertyJFIFDictionary,
                            nil];

CGImageDestinationAddImage(destination, ((UIImage*)object).CGImage, (__bridge CFDictionaryRef)properties);
CGImageDestinationFinalize(destination);
CFRelease(destination);

这在模拟器中运行时效果很好,但不幸的是在设备上产生了厚实/块状的结果:

块状/块状结果。

关于发生了什么的任何想法?我会恢复使用UIImageJPEGRepresentation作为最后的手段,我真的需要渐进式 JPEG。

4

2 回答 2

0

在 iOS 模拟器上它可以如你所提到的。

但是您是否在带有 Retina Display 的 IOS 模拟器上进行了测试。为此,请执行以下步骤: 1. 启动模拟器 2. 转到“硬件”-->“设备” 3. 选择具有 Retina 显示屏的模拟器并再次检查。

如果您在 ios 视网膜模拟器上遇到问题,那么您就明白了。

尝试使用分辨率非常小的图像,然后在您的设备上进行测试。

很少有问题可以在UIImageView. 请检查下面提到的链接:- UIImageView 中的高分辨率图像

于 2012-08-04T08:41:46.287 回答
0

好消息:我刚刚在 iPhone 4 上进行了测试,图像看起来很棒:

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys:
@72, kCGImagePropertyJFIFXDensity,
@72, kCGImagePropertyJFIFYDensity,
@1, kCGImagePropertyJFIFDensityUnit,
nil];

(使用新的文字语法)。

一个很好的JFIF 参考,了解这些密度选项的含义。

于 2012-08-08T22:54:42.680 回答