2012-05-31 8 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.

क्या हो रहा है पर कोई भी विचार:, लेकिन दुर्भाग्य से डिवाइस पर chunky/ब्लॉक वाले परिणाम का उत्पादन? मैं अंतिम उपाय के रूप में UIImageJPEGRepresentation का उपयोग करने के लिए वापस आऊंगा, मुझे वास्तव में प्रगतिशील जेपीईजी की आवश्यकता है।

+0

आईओएस संस्करण क्या है? – Raptor

+0

@ShivanRaptor का परीक्षण आईओएस 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

आईओएस सिम्युलेटर पर आपके द्वारा उल्लिखित ठीक है।

लेकिन क्या आपने रेटिना डिस्प्ले के साथ आईओएस सिम्युलेटर पर परीक्षण किया है। इसके लिए निम्न चरणों का पालन करें: 1. सिम्युलेटर लॉन्च करें 2. "हार्डवेयर" पर जाएं -> "डिवाइस" 3. रेटिना डिस्प्ले के साथ एक सिम्युलेटर चुनें और इसे फिर से जांचें।

यदि आपको आईओएस रेटिना सिम्युलेटर पर समस्या आती है तो आपको पकड़ मिल गई।

बहुत छोटे रिज़ॉल्यूशन की एक छवि का उपयोग करने का प्रयास करें और फिर अपने डिवाइस पर इसका परीक्षण करें।

UIImageView में बहुत अधिक रिज़ॉल्यूशन छवि दिखाने के लिए कुछ समस्याएं हैं। लिंक नीचे उल्लेख की जांच करें: - High Resolution Image in UIImageView

संबंधित मुद्दे