NSData到UIImage转换不起作用?

时间:2016-03-14 08:16:00

标签: ios objective-c uiimage base64 nsdata

我的服务器以下列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吗?

3 个答案:

答案 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;
}

现在工作正常。