Wednesday, 5 March 2014

iPhone Development: Convert image into base64 string




Base 64 image


Need to post image to server from your iPhone app, and your server guy who wrote down the PHP script asked you to send image as base64 String.In iPhone we can convert an image to base64 string using below pesudocode





-(NSString *)Base64Encode:(NSData *)data {
    //Point to start of the data and set buffer sizes
    int inLength = [data length];
    int outLength = ((((inLength * 4)/3)/4)*4) + (((inLength * 4)/3)%4 ? 4 : 0);
    const char *inputBuffer = [data bytes];
    char *outputBuffer = malloc(outLength);
    outputBuffer[outLength] = 0;
   
    //64 digit code
    static char Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
   
    //start the count
    int cycle = 0;
    int inpos = 0;
    int outpos = 0;
    char temp;
   
    //Pad the last to bytes, the outbuffer must always be a multiple of 4
    outputBuffer[outLength-1] = '=';
    outputBuffer[outLength-2] = '=';
   
    while (inpos < inLength){
        switch (cycle) {
            case 0:
                outputBuffer[outpos++] = Encode[(inputBuffer[inpos]&0xFC)>>2];
                cycle = 1;
                break;
            case 1:
                temp = (inputBuffer[inpos++]&0x03)<<4 br="">                outputBuffer[outpos] = Encode[temp];
                cycle = 2;
                break;
            case 2:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xF0)>> 4];
                temp = (inputBuffer[inpos++]&0x0F)<<2 br="">                outputBuffer[outpos] = Encode[temp];
                cycle = 3;
                break;
            case 3:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xC0)>>6];
                cycle = 4;
                break;
            case 4:
                outputBuffer[outpos++] = Encode[inputBuffer[inpos++]&0x3f];
                cycle = 0;
                break;
            default:
                cycle = 0;
                break;
        }
    }
    NSString *pictemp = [NSString stringWithUTF8String:outputBuffer];
    free(outputBuffer);
    return pictemp;
}


For getting image as base64 string we have to pass our image as a data(raw format) to above method and it will return that data as string encoded in base64. You can use it as follows
 NSString *base64String  = [self Base64Encode:UIImageJPEGRepresentation(profilePicImageView.image,1.0)];

Here profilePicImageView is our UIImageView and we are converting image as data using  UIImageJPEGRepresentation method provided in xcode.

No comments:
Write comments