我的服务器以下列NSData格式提供我的jpg图像:
/9j/4AAQSkZJRgABAQAASABIAAD/4QBMRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQA
AAABAAAAJgAAAAAAAqACAAQAAAABAAAGqKADAAQAAAABAAAI4AAAAAD/7QA4UGhvdG9zaG9wIDMu
MAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgI4AaoAwERAAIR
AQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAAB
fQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5/
我将它保存到文件中,在读取该文件时,我下面代码中的img对象给出了nil,尽管imgData对象正在保存已保存的数据。
- (void)selectedAttachedFiledownloadedSuccessfully
{
NSLog(@"\nFile has downloaded\n");
NSData *imgData = [NSData dataWithContentsOfFile:[self pathOfTheImage]];
NSString * imageExt = [self contentTypeForImageData:imgData];
UIImage *img = [UIImage imageWithData:imgData];
self.imgView.image = img;
}
检查NSData的图像格式,它不匹配任何,我的代码在下面返回我的
- (NSString *)contentTypeForImageData:(NSData *)data {
uint8_t c;
[data getBytes:&c length:1];
switch (c) {
case 0xFF:
return @"image/jpeg";
case 0x89:
return @"image/png";
case 0x47:
return @"image/gif";
case 0x49:
case 0x4D:
return @"image/tiff";
}
return nil;
}
我不知道我在这里做错了什么。任何人都可以引导我通过这个PLZ吗?
答案 0 :(得分:0)
存储数据时,您可能使用了错误的编码(例如NSUTF8StringEncoding
)。
NSUTF32StringEncoding
应该用于图像数据。
答案 1 :(得分:0)
您从服务器返回的NSData可能已损坏。如果数据格式不正确,则无法返回正确的图像
使用+ (instancetype)dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)mask error:(NSError * _Nullable *)errorPtr
从文件中读取图像并检查errorPtr
的值
请参阅此链接以获取上述方法的解释https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/#//apple_ref/occ/clm/NSData/dataWithContentsOfFile:options:error:
答案 2 :(得分:0)
服务器正在以base64Binary字符串格式发送我的图像。我把它改为NSData:
NSData *data = [[NSData alloc] initWithBase64EncodedString:output[1] options:NSDataBase64DecodingIgnoreUnknownCharacters];
我将此数据保存到我的图像文件中:
[data writeToFile:filePath atomically:YES];
读取它以在图像视图上显示为:
- (void)showImage
{
NSData *imgData = [NSData dataWithContentsOfFile:[self pathOfTheImage]];
UIImage *img = [UIImage imageWithData:imgData];
self.imgView.image = img;
}
现在工作正常。