2012-05-14 74 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]; 
}