Search code examples
iosiphoneuiimageviewnsdata

Converting UIImage to NSData and NSData to NSString for posting images to a server


I have two UIImageViews. I want to post two images to server through the script. Before that I have to convert these images to data and data to string but I don't know how to convert the images from UIImageView to NSData and NSData to NSString.I have referred all the codes but it does not work. I would also like to know as to where should I declare the conversion coding (image to data and data to image) in my code?

This is what I have implemented

.h part

  #import <UIKit/UIKit.h>
  #import "GlobalAccessClass.h"
  #import  <QuartzCore/QuartzCore.h>

  @interface AskQuestionHome :  UIViewController<UITextViewDelegate,UITextFieldDelegate,UIImagePickerControllerDelegate,UIActionSheetDelegate>

  {

  }
  @property (strong, nonatomic) IBOutlet UIImageView *imgSecondImg;

  @property (strong, nonatomic) IBOutlet UIImageView *imgFirstImg;

  @property (strong, nonatomic) IBOutlet UITextView *txtviewAsk;

  -(IBAction)postbutton:(id)sender;

  @property (nonatomic,retain) NSString *datestr;

  @property(nonatomic,retain) NSData *imageData;

  @property(nonatomic,retain) NSString *postLength;

  @end

.m part

 -(void)post
 {
     NSMutableURLRequest *mutableurlrequest = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://www.alvinchuastudios.com/aNSWERED/insert_question.php"]];

  // create the Method  "POST" For POSTING the QUESTIION with IMAGES
        [mutableurlrequest setHTTPMethod:@"POST"];

        NSLog(@"the email is:%@",manage.transformEmail);
        NSLog(@"the cat is:%@",manage.transformCategories);
        NSLog(@"the text is:%@",textviewText.text);
       // NSLog(@"the firstimage is:%ld",(long)imgFirstImg.tag);
       // NSLog(@"the secondimage is:%ld",(long)imgSecondImg.tag);
       // NSlog(@"the status is:%d",1);
        NSLog(@"the user is:%@",manage.transformName);
        NSLog(@"the user registered is:%@",datestr);


  //passing the string to the server
        NSString *qususerUpdate =[NSString stringWithFormat:@"email_id=%@&cat=%@&q_text=%@&q_image1=%ld&q_image2=%ld&q_status=1&last_upd_by=%@&last_upd_timestamp=%@",manage.transformEmail,manage.transformCategories,textviewText.text,(long)imgFirstImg.tag,(long)imgSecondImg.tag,manage.transformName,datestr,Nil];


  //check the value that what we passed 
        NSLog(@"the data Details is =%@", qususerUpdate);


  //Convert the String to Data
        NSData *data1 =[qususerUpdate dataUsingEncoding:NSUTF8StringEncoding];

  //Apply the data to the body
        [mutableurlrequest setHTTPBody:data1];

  //Create the response and Error
        NSError *err;
        NSURLResponse *response;
        NSData *responseData =[NSURLConnection sendSynchronousRequest:mutableurlrequest returningResponse:&response error:&err];
        NSString *resStr =[[NSString alloc]initWithData:responseData encoding:NSASCIIStringEncoding];

  //This is for Response
        NSLog(@"got response==%@", resStr);  } 

Solution

  • After Long time I post my answer here.

    Option 1 : Image to server and Image from Server

    When we send image to server(UIImage-NSData-NSString), we need to use below coding

    NSData *postData = UIImageJPEGRepresentation(myImage, 1.0);
    NSString *strEncoded  = [postData base64EncodedStringWithOptions:0];
    

    When we get the image from server(NSString-NSData-UIImage),we need to use below coding

    NSData *getData  = [[NSData alloc] initWithBase64EncodedString:strEncodedFromServer options:0];
    UIImage *image = [UIImage imageWithData:getData];
    

    Option 2 : Simple String Encode,Decode Conversion

    NSString *strName = @"iOS";
    NSData *dataEncoded = [strName dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64EncodedString = [dataEncoded base64EncodedStringWithOptions:0];
    NSLog(@"The Encoded String is - %@", base64EncodedString);
    
    NSData *dataDecoded = [[NSData alloc] initWithBase64EncodedString:base64EncodedString options:0];
    NSString *strDecoded = [[NSString alloc] initWithData:dataDecoded encoding:NSUTF8StringEncoding];
    NSLog(@"The DeCoded String is - %@", strDecoded);
    

    Output Screenshot is

    enter image description here

    Option 3 : When we need to encode and decode the dictionary

    NSDictionary *dictEncoded = @{
                                        @"OS":@"iOS",
                                        @"Mobile":@"iPhone",
                                        @"Version":@"iOS10"
                                    };
    
    NSData *dataDictEncode = [NSJSONSerialization dataWithJSONObject:dictEncoded options:(NSJSONWritingOptions) 0 error:nil];
    NSString *strBase64Encode = [dataDictEncode base64EncodedStringWithOptions:0];
    NSLog(@"The encoded dictionary is - %@", strBase64Encode);
    
    NSData *dataDictDecode = [[NSData alloc] initWithBase64EncodedString:strBase64Encode options:0];
    NSDictionary *dictDecoded = [NSJSONSerialization JSONObjectWithData:dataDictDecode options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"The decoded dictionary is - %@", dictDecoded);
    

    Output result is

    enter image description here