2013-07-03 54 views
-1

在服務器中,圖像以二進制格式存儲。我必須使用json在iphone中檢索圖像。我怎樣才能做到這一點?是否有可能使用NSData來做到這一點?如何在服務器中以二進制格式在iPhone中檢索圖像

+0

API後端哪種語言使用php或其他東西 –

+0

你爲什麼不接受答案?有什麼不對嗎? – 2014-01-13 05:26:05

回答

0

您必須使用json解析從服務器獲取二進制值,然後將該字符串轉換爲NSData。

這是用於將base64字符串轉換爲NSData的標準代碼。

//MBBase64.h 

@interface NSData (MBBase64) 

+ (id)dataWithBase64EncodedString:(NSString *)string;  // Padding '=' characters are optional. Whitespace is ignored. 

@end 


//MBBase64.m 

static const char encodingTable[] =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 

@implementation NSData (MBBase64) 

+ (id)dataWithBase64EncodedString:(NSString *)string; 
{ 
    if (string == nil) 
     [NSException raise:NSInvalidArgumentException format:nil]; 
    if ([string length] == 0) 
     return [NSData data]; 

    static char *decodingTable = NULL; 
    if (decodingTable == NULL) 
    { 
     decodingTable = malloc(256); 
     if (decodingTable == NULL) 
      return nil; 
     memset(decodingTable, CHAR_MAX, 256); 
     NSUInteger i; 
     for (i = 0; i < 64; i++) 
      decodingTable[(short)encodingTable[i]] = i; 
     }  

    const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding]; 
    if (characters == NULL)  // Not an ASCII string! 
     return nil; 
    char *bytes = malloc((([string length] + 3)/4) * 3); 
    if (bytes == NULL) 
     return nil; 
    NSUInteger length = 0; 

    NSUInteger i = 0; 
    while (YES) 
    { 
     char buffer[4]; 
     short bufferLength; 
     for (bufferLength = 0; bufferLength < 4; i++) 
     { 
      if (characters[i] == '\0') 
       break; 
      if (isspace(characters[i]) || characters[i] == '=') 
       continue; 
       buffer[bufferLength] = decodingTable[(short)characters[i]]; 
      if (buffer[bufferLength++] == CHAR_MAX)  // Illegal character! 
      { 
       free(bytes); 
       return nil; 
      } 
     } 

     if (bufferLength == 0) 
      break; 
     if (bufferLength == 1)  // At least two characters are needed to produce one byte! 
     { 
      free(bytes); 
      return nil; 
     } 

     // Decode the characters in the buffer to bytes. 
     bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4); 
     if (bufferLength > 2) 
      bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2); 
    if (bufferLength > 3) 
     bytes[length++] = (buffer[2] << 6) | buffer[3]; 
    } 

    realloc(bytes, length); 
    return [NSData dataWithBytesNoCopy:bytes length:length]; 
} 

@end 

然後加載導致的NSData中的UIImageView

yourimageview.image = [[UIImage alloc] initWithData:resultdata]; 
1

是的,你需要的二進制數據隱蔽到NSData的是這樣的:

NSData *imgData = [NSData dataWithBase64EncodedString:yourelement]; 
UIImage *theImg = [UIImage imageWithData:imgData]; 

您需要MBBase64類,這是可以在這裏:https://github.com/jerrykrinock/CategoriesObjC

相關問題