iPhone - Повредите данные JPEG для изображения, полученного по HTTP

Попробуйте также:

this.log = console.log.bind( console, '[' + new Date().toUTCString() + ']' );

Эта функция помещает метку времени, имя файла и номер строки в то же самое из встроенного console.log.

7
задан bpapa 30 June 2009 в 17:29
поделиться

3 ответа

Ваш HTTP-код выглядит правильно. Возможно, вы захотите зарегистрировать размер полученных данных после завершения загрузки и сравнить его с ожидаемым размером изображения на сервере. Если это ожидаемый размер, возможно, само изображение повреждено на сервере.

9
ответ дан 6 December 2019 в 14:07
поделиться

Я тоже это видел. Если вы сохраняете данные в файл, а затем считываете данные обратно в изображение, все работает отлично. Я подозреваю, что в данных изображения jpeg есть информация HTTP-заголовка.

Надеюсь, кто-то найдет решение этой проблемы, потому что обходной путь сохранения в файл - отстой.

// problem

UIImage *newImage = [UIImage imageWithData:receivedData];

// crappy workaround

[receivedData writeToFile:[NSString stringWithFormat:@"a.jpg"] atomically:NO];
UIImage *newImage = [UIImage imageWithContentsOfFile:@"a.jpg"];
1
ответ дан 6 December 2019 в 14:07
поделиться

ASI-HTTP может решить эту проблему.

NSURL *coverRequestUrl = [NSURL URLWithString:imageStringURL];
ASIHTTPRequest *coverRequest = [[ASIHTTPRequest alloc] initWithURL:coverRequestUrl];
[coverRequest setDelegate:self];
[coverRequest setDidFinishSelector:@selector(imageRecieved:)];

[appDelegate.queue addOperation:coverRequest];
[appDelegate.queue go];

Моя переменная очереди в appDelegate - это объект очереди ASINetwork. Поскольку я отправляю асинхронный запрос, поэтому использую его.

- (void)imageRecieved:(ASIHTTPRequest *)response
{
    UIImage *myImage = [UIImage imageWithData:[response responseData]];
}
3
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: