Reputation: 9589
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); }
Upvotes: 3
Views: 14222
Reputation: 9589
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
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
Upvotes: 2
Reputation: 1768
For Base64 encoding with swift 3
func createImageString(image: UIImage) -> String? {
if let dataImage = UIImagePNGRepresentation(image) {
return dataImage.base64EncodedString(options: .lineLength64Characters)
}
return nil
}
Upvotes: 0
Reputation: 11
the answer is right ,and converting NSString to Data to Uiimage in ios is below:
UIImage* image=nil;
NSString* path =[NSString stringWithFormat: @"%@",@"http://wx.qlogo.cn/mmopen/q9UTH59ty0K1PRvIQkyydYMia4xN3gib2m2FGh0tiaMZrPS9t4yPJFKedOt5gDFUvM6GusdNGWOJVEqGcSsZjdQGKYm9gr60hibd/0"];
NSURL* url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];//网络图片url
NSData* data = [NSData dataWithContentsOfURL:url];//获取网咯图片数据
if(data!=nil)
{
image = [[UIImage alloc] initWithData:data];//根据图片数据流构造image
}
NSData *dataImage = [[NSData alloc] init];
dataImage = UIImagePNGRepresentation(image);
NSString *stringImage = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
imgstr = stringImage;
NSData *data = [[NSData alloc] initWithBase64EncodedString:imgstr options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImageView *img1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 300, 200, 200)];
img1.image =[[UIImage alloc] initWithData:data];//根据图片数据流构造image
[self.view addSubview:img1];
Upvotes: 1
Reputation: 392
I think Ashu's answer will return a null. try this
NSData *dataImage = [[NSData alloc] init];
dataImage = UIImagePNGRepresentation(image);
NSString *stringImage = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
Upvotes: 7
Reputation: 175
You can use the following library for pre- ios 7 : https://github.com/l4u/NSData-Base64/blob/master/NSData%2BBase64.h (or) If your app is for ios 7 and above , apple has added the category NSData + Base64 which is inbuilt in ios 7 SDK
Upvotes: 0
Reputation: 2225
// From image to data
NSData *imgData = [NSData dataWithData:UIImagePNGRepresentation(yourImage)];
// From data to string
NSString *string = [[NSString alloc] initWithData:imgData encoding:NSUTF8StringEncoding];
Upvotes: 2