2012-05-31 75 views
11

我試圖從UIImage對象創建一個漸進式JPEG塊狀的結果,這是我的代碼是創建與ImageIO的iOS的漸進式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模擬器上,它可以像你提到的那樣。

但你有沒有在IOS模擬器上使用Retina Display進行測試。爲此,請執行以下步驟: 1.啓動模擬器 2.轉到「硬件」 - >「設備」 3.選擇帶有視網膜顯示器的模擬器並再次檢查。

如果您在ios視網膜模擬器上遇到問題,那麼您就有這個問題。

嘗試使用非常小的分辨率圖像,然後在設備上測試它。

很少有問題可以在UIImageView中顯示非常高分辨率的圖像。 請檢查下面提到的鏈接: - High Resolution Image in UIImageView

相關問題