2012-05-31 11 views
11

にブロック状の結果を生成し、これは私がシミュレータで実行しているときにこれは素晴らしい作品はImageIOにとiOSのプログレッシブJPEGを作成する私は<code>UIImage</code>オブジェクトからプログレッシブ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); 

だコードですが、残念ながら、デバイス上の分厚い/ブロック状の結果生成します。何が起こっているのに

chunky/blocky result.

任意のアイデア?私は最後の手段としてUIImageJPEGRepresentationを使用することに戻りたいと思います。私は本当にプログレッシブJPEGが必要です。

+0

iOSのバージョンは何ですか? – Raptor

+0

@ShivanRaptor iOS 5.0 - 5.1.1でテストされています –

+0

私の電話でコードをテストしようとしています。あなたが使っている 'test.jpg'も共有できますか? – Raptor

答えて

0

グッドニュース:私はちょうどiPhone 4でこれをテストし、画像が見栄え:

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

(新しいリテラル構文を使用)。

いいえJFIF referenceこれらの密度オプションの意味については、

0

iOSシミュレータでは、あなたが言ったように大丈夫です。

しかし、Retina Displayを搭載したIOSシミュレータでテストしましたか? 1.起動シミュレータ 2.「ハードウェア」 - >「デバイス」 に移動します。3.網膜ディスプレイ付きシミュレータを選択し、もう一度チェックします。

ios retinaシミュレータで問題が発生した場合は、キャッチがあります。

非常に小さい解像度の画像を使用して、お使いのデバイスでテストしてみてください。

UIImageViewに非常に高解像度の画像を表示する問題はほとんどありません。 下記のリンクをご確認ください: - High Resolution Image in UIImageView

関連する問題