2010-10-03 12 views
14

Al crear un UIImage con los datos corruptos/incompleta JPEG, la consola se imprimaerrores Catching: datos JPEG corrupto: final prematuro del segmento de datos

<Error>: Corrupt JPEG data: premature end of data segment

Se mostrará la imagen incompleta, con relleno gris la parte incompleta. No quiero que esto suceda.

desesperadamente trataron con un bloque try-catch pero no captura el error. ¿Hay alguna forma de detectar el error?

Respuesta

13

depende de cómo se está recibiendo los datos, etc. Tal vez esto es lo que busca: iphone-corrupt-jpeg-data-for-image-received-over-http

Una forma sencilla de comprobar si los datos JPEG es completa o no es comprobar los primeros y los últimos dos bytes para FF D8 y FF D9 respectivamente. Esos dos bytes identifican el inicio y el final de un archivo JPEG, respectivamente.

+1

Esto funcionaría como una solución para mi propósito. Pero todavía tengo curiosidad de cómo se puede capturar el error. – samwize

+1

Los primeros 2 bytes deben ser FF D8 – samwize

+1

así que si tengo el JPG representado como NSData desde el disco de iOS, ¿cómo verificaría los últimos 2 dígitos? – Slee

23

En respuesta a la pregunta de Slee anteriormente, este es el método que utilizo:

-(BOOL)dataIsValidJPEG:(NSData *)data 
{ 
    if (!data || data.length < 2) return NO; 

    NSInteger totalBytes = data.length; 
    const char *bytes = (const char*)[data bytes]; 

    return (bytes[0] == (char)0xff && 
      bytes[1] == (char)0xd8 && 
      bytes[totalBytes-2] == (char)0xff && 
      bytes[totalBytes-1] == (char)0xd9); 
} 
+1

+1 ¡Gracias por el fragmento de código modular! – Jean

+0

+1 ¡Impresionante! funciona muy bien, gracias – avishic

+0

Gracias, trabajo gr8! –

Cuestiones relacionadas