2012-05-31 7 views
11

Estoy intentando crear un archivo JPEG progresivo desde un objeto UIImage, este es el código que estoyCreación JPEG progresivo en IOS con ImageIO produce resultados en bloques en el dispositivo

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

Esto funciona muy bien cuando se ejecuta en el simulador , pero lamentablemente produce resultados gruesos/en bloques en el dispositivo:

chunky/blocky result.

alguna idea de lo que está pasando? volvería a usar UIImageJPEGRepresentation como último recurso, realmente necesito archivos JPEG progresivos.

+0

¿Cuál es la versión de iOS? – Raptor

+0

@ShivanRaptor ha sido probado con iOS 5.0 - 5.1.1 –

+0

Estoy tratando de probar los códigos con mi teléfono. ¿Puedes compartir el 'test.jpg' que estás usando? – Raptor

Respuesta

0

Buenas noticias: Acabo de probar esto en un iPhone 4 y la imagen se ve muy bien:

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

(usando la nueva sintaxis literal).

Un buen JFIF reference por lo que significan estas opciones de densidad.

0

En el simulador de iOS está bien como usted lo mencionó.

Pero has probado en el simulador IOS con Retina Display. Para esto, realice los siguientes pasos: 1. Ejecute Simulator 2. Vaya a "Hardware" -> "Dispositivo" 3. Seleccione un simulador con Retina Display y vuelva a verificarlo.

Si encuentra el problema en el simulador de ios retina, entonces tiene el truco.

Intente utilizar una imagen de resolución muy pequeña y luego pruébela en su dispositivo.

Hay algunos problemas para mostrar imágenes de muy alta resolución en UIImageView. Por favor, compruebe el enlace se mencionan a continuación: - High Resolution Image in UIImageView

Cuestiones relacionadas