2010-10-03 1 views
14

Lors de la création d'un UIImage avec des données JPEG corrompus/incomplète, la console imprimerAttraper erreur: Corrupt données JPEG: fin prématurée du segment de données

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

L'image incomplète sera affichée, avec un remplissage gris la partie incomplète. Je ne veux pas que cela arrive.

J'ai désespérément essayé avec un bloc try-catch, mais il n'attrape pas l'erreur. Y at-il un moyen d'attraper l'erreur?

Répondre

13

dépend de la façon que vous obtenez les données, etc. Peut-être que c'est ce que vous cherchez: iphone-corrupt-jpeg-data-for-image-received-over-http

Une façon simple de vérifier si les données JPEG est complète est ou non de vérifier les premiers et les deux derniers octets pour FF D8 et FF D9 respectivement. Ces deux octets identifient respectivement le début et la fin d'un fichier JPEG.

+1

Cela fonctionnera comme une solution pour mon but. Mais je suis toujours curieux de savoir comment l'erreur peut être attraper. – samwize

+1

Les 2 premiers octets devraient être FF D8 – samwize

+1

, donc si j'ai le JPG représenté comme NSData du disque iOS, comment vérifierais-je les 2 derniers chiffres? – Slee

23

En réponse à la question de Slee ci-dessus, c'est la méthode que je l'utilise:

-(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 Merci pour l'extrait de code modulaire! – Jean

+0

+1 Génial! fonctionne très bien, merci – avishic

+0

Merci, travail gr8! –

Questions connexes