Ошибка перехвата: поврежденные данные JPEG: преждевременный конец сегмента данных - PullRequest
14 голосов
/ 03 октября 2010

При создании UIImage с поврежденными / неполными данными JPEG консоль распечатает

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

Будет показано неполное изображение с серым, заполняющим неполную часть. Я не хочу, чтобы это произошло.

Я отчаянно пытался с блоком try-catch, но он не улавливает ошибку. Есть ли способ отловить ошибку?

Ответы [ 2 ]

23 голосов
/ 15 июня 2012

В ответ на вопрос Сли выше, я использую этот метод:

-(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);
}
13 голосов
/ 03 октября 2010

Зависит от того, как вы получаете данные и т. Д. Возможно, это то, что вы ищете: iphone-поврежден-jpeg-данные-для-изображения-получен-через-http

Простой способ проверить, заполнены ли данные JPEG или нет, состоит в том, чтобы проверить первые и последние два байта для FF D8 и FF D9 соответственно. Эти два байта определяют начало и конец файла JPEG соответственно.

...