2012-05-14 73 views
0

我試圖添加一個UIImage到HTML電子郵件,但是我遇到問題。我環顧了很多其他職位,他們都聲明我需要將我的NSData轉換爲base64,但是他們都建議的方法似乎不再存在(除非我錯過了某些東西?!)。如何將NSData編碼爲base64? (iPhone/iPad)

這裏是我到目前爲止的代碼:

UIImage *mapImage = [mapViewController convertMapToImage]; 
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(mapImage)]; 
NSString *base64String = // [imageData base64EncodedString]; --- this method isn't recognised 

請有人可以幫我嗎?

回答

5
+ (NSString*)base64forData:(NSData*)theData { 
const uint8_t* input = (const uint8_t*)[theData bytes]; 
NSInteger length = [theData length]; 

static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

NSMutableData* data = [NSMutableData dataWithLength:((length + 2)/3) * 4]; 
uint8_t* output = (uint8_t*)data.mutableBytes; 

NSInteger i; 
for (i=0; i < length; i += 3) { 
    NSInteger value = 0; 
    NSInteger j; 
    for (j = i; j < (i + 3); j++) { 
     value <<= 8; 

     if (j < length) { 
      value |= (0xFF & input[j]); 
     } 
    } 

    NSInteger theIndex = (i/3) * 4; 
    output[theIndex + 0] =     table[(value >> 18) & 0x3F]; 
    output[theIndex + 1] =     table[(value >> 12) & 0x3F]; 
    output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; 
    output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; 
} 

return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]; 
}