2

I'd tried the following

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
  imagedata = UIImageJPEGRepresentation([info objectForKey:@"UIImagePickerControllerOriginalImage"],1); 

  NSString *s1 = [[[NSString alloc]initWithData:imagedata encoding:NSUTF8StringEncoding]autorelease];

  NSString *s2 = [[[NSString alloc]  initWithBytes:[imagedata bytes]
                                              length:[imagedata length] encoding: NSUTF8StringEncoding]autorelease];

  NSString *s3 = [NSString stringWithUTF8String:[imagedata bytes]];


  [picker dismissModalViewControllerAnimated:YES];

}

if I see the Printing description of imagedata: in Debugger Console,I can see the blob value there. But I cant get that in NSString , all the above s1,s2,s3 returns null value. I want to upload the blob value of the image to remote server database. What's The solution for it?

Nazik
  • 8,696
  • 27
  • 77
  • 123
  • make sure ur data is not null – Saad May 18 '12 at 09:50
  • 1
    Im sure my data is not null .I saw that in debugger console – Nazik May 18 '12 at 09:51
  • 2
    you can't do by this, you need to convert the `NSData` to `Baswe64` string then you can pass this to server. I will post that to you once i found whee i did that. – Waqas Raja May 18 '12 at 09:54
  • 1
    but why you want to convert imageData to NSString ? you can send NSData to your server – Maulik May 18 '12 at 10:00
  • @Maulik I found some difficulties in that see my question.[http://stackoverflow.com/questions/9889332/using-asmx-file-for-uploading-image-from-iphone] – Nazik May 18 '12 at 10:09
  • Im waiting for Waqas Raja's Post – Nazik May 18 '12 at 10:14
  • You accepted the answer on that SO question, but I think the solution is actually in this SO question: http://stackoverflow.com/questions/8564833/ios-upload-image-and-text-using-http-post – trojanfoe May 18 '12 at 10:22
  • @Azik: I show your previous question and I think you need to change in web method at back-end...That method accepts String as argument thats why tou are trying to convert imageData to string, Right ? – Maulik May 18 '12 at 10:32

3 Answers3

3

You are trying to convert image into NSString using various encoding methods which will return you null because you can not convert UIImage to NSString.

The alternative is to use base64 encoding function to convert into NSString Add this piece of code in your class:

static char base64EncodingTable[64] = 
{
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
};

@implementation NSString (NSStringAdditions)

+ (NSString *) base64StringFromData: (NSData *)data length: (int)length 
{
    unsigned long ixtext, lentext;
    long ctremaining;
    unsigned char input[3], output[4];
    short i, charsonline = 0, ctcopy;
    const unsigned char *raw;
    NSMutableString *result;

    lentext = [data length]; 
    if (lentext < 1)
        return @"";
    result = [NSMutableString stringWithCapacity: lentext];
    raw = [data bytes];
    ixtext = 0; 

    while (true) 
    {
        ctremaining = lentext - ixtext;
        if (ctremaining <= 0) 
            break;        
        for (i = 0; i < 3; i++) 
        { 
            unsigned long ix = ixtext + i;
            if (ix < lentext)
                input[i] = raw[ix];
            else
                input[i] = 0;
        }
        output[0] = (input[0] & 0xFC) >> 2;
        output[1] = ((input[0] & 0x03) << 4) | ((input[1] & 0xF0) >> 4);
        output[2] = ((input[1] & 0x0F) << 2) | ((input[2] & 0xC0) >> 6);
        output[3] = input[2] & 0x3F;
        ctcopy = 4;
        switch (ctremaining) 
        {
            case 1: 
                ctcopy = 2; 
                break;
            case 2: 
                ctcopy = 3; 
                break;
        }

        for (i = 0; i < ctcopy; i++)
            [result appendString: [NSString stringWithFormat: @"%c", base64EncodingTable[output[i]]]];

        for (i = ctcopy; i < 4; i++)
            [result appendString: @"="];

        ixtext += 3;
        charsonline += 4;

        if ((length > 0) && (charsonline >= length))
            charsonline = 0;
    }     
    return result;
}

@end

and then use following statement to convert into NSString:

NSString *fileStream=[NSString base64StringFromData:imagedata length:[imagedata length] ];
Incredible
  • 86
  • 7
2

Try this

NSString* aStr = [[NSString alloc] initWithData:aData encoding:NSASCIIStringEncoding];

it worked for me.

Ronak
  • 974
  • 6
  • 14
0

If you want to see the raw binary / hex values of your data as a string value, do this:

NSString *hashString = [data.description stringByReplacingOccurrencesOfString:@" " withString:@""];

// Remove brackets < > from the end
hashString = [hashString substringWithRange:NSMakeRange(1, hashString.length-2)];

I used this because I wanted to verify my sha512 data values.

Jon
  • 7,848
  • 1
  • 40
  • 41