2012-05-31 5 views
11

Ich versuche produziert, das ist der Code iErstellen progressive JPEG auf iOS mit ImageIO blocky Ergebnisse auf dem Gerät eine progressive JPEG von einem <code>UIImage</code> Objekt zu erstellen

bin
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); 

Dies funktioniert gut, wenn in Simulator läuft , produziert aber leider klobig/blocky Ergebnisse auf dem Gerät:

chunky/blocky result.

Irgendwelche Ideen auf, was los ist? Ich würde wieder auf UIImageJPEGRepresentation als letztes Mittel zurückgreifen, ich brauche wirklich progressive JPEGs.

+0

Was ist die iOS-Version? – Raptor

+0

@ShivanRaptor wurde mit iOS 5.0 - 5.1.1 getestet –

+0

Ich versuche, die Codes mit meinem Handy zu testen. Kannst du auch das 'test.jpg' teilen, das du benutzt? – Raptor

Antwort

0

gute Nachricht: Ich dieses 4 auf einem iPhone gerade getestet und das Bild sieht gut aus:

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

(neue Literalsyntax verwenden).

Eine gute JFIF reference für was diese Dichte Optionen bedeuten.

0

Auf iOS-Simulator ist es okay, wie von Ihnen erwähnt.

Aber haben Sie am IOS-Simulator mit Retina Display getestet. Führen Sie dazu folgende Schritte aus: 1. Starten Sie den Simulator 2. Gehen Sie zu "Hardware" -> "Gerät" 3. Wählen Sie einen Simulator mit Retina Display und überprüfen Sie es erneut.

Wenn Sie das Problem auf Ios Retina-Simulator dann begegnen, haben Sie den Haken.

Versuchen Sie ein Bild mit sehr kleiner Auflösung zu verwenden und testen Sie es dann auf Ihrem Gerät.

Es gibt einige Probleme zu zeigen, sehr hohe Auflösung Bild in UIImageView. Bitte überprüfen Sie die unten genannten Link: - High Resolution Image in UIImageView