Ошибка обнаружения: поврежденные данные JPEG: преждевременный конец сегмента данных
При создании UIImage с поврежденными/неполными данными JPEG консоль распечатает
<Error>: Corrupt JPEG data: premature end of data segment
Отобразится неполное изображение с серым заполнением неполной части. Я не хочу, чтобы это произошло.
Я отчаянно пробовал блок try-catch, но он не поймал ошибку. Есть ли способ уловить ошибку?
Ответы
Ответ 1
В зависимости от того, как вы получаете данные и т.д. Возможно, это то, что вы ищете: iphone-corrupt-jpeg-data-for-image-received-over-http
Простой способ проверить, завершены ли данные JPEG или нет, проверить первый и последний два байта для FF D8 и FF D9 соответственно. Эти два байта определяют начало и конец файла JPEG соответственно.
Ответ 2
В ответ на вопрос Slee выше, это метод, который я использую:
-(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);
}