问题是,当图像大小超过60 kb时,它不会将图像发布到Web服务,但如果图像大小小于60 kb,则将其发布到Web服务。
如何减小目标c中图像的大小。 以下是我正在使用的代码,
-(IBAction)sendEmail:(id)sender
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"TABLEDIC%@",appDelegate.tableDic);
//Parsing
recordResults = FALSE;
NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<CreateTextMail xmlns=\"http://tempuri.org/\">\n"
"<listid>%@</listid>\n"
"<fromid>%@</fromid>\n"
"<subject>%@</subject>\n"
"<replyto>%@</replyto>\n"
"<loginid>%@</loginid>\n"
"<fromname>%@</fromname>\n"
"<forward>%@</forward>\n"
"<subscribe>%@</subscribe>\n"
"<mailpriority>%@</mailpriority>\n"
"<recievermailtext>%@</recievermailtext>\n"
"<mailbody>%@</mailbody>\n"
"<emailname>%@</emailname>\n"
"<signature>%@</signature>\n"
"<listname>%@</listname>\n"
"<emailtype>%@</emailtype>\n"
"<imagecontent>%@</imagecontent>\n"
"<imagename>%@</imagename>"
"</CreateTextMail>\n"
"</soap:Body>\n"
"</soap:Envelope>\n",[appDelegate.tableDic valueForKey:@"tableID"],[appDelegate.tableDic valueForKey:@"fromname"],[appDelegate.tableDic valueForKey:@"subject"],[appDelegate.tableDic valueForKey:@"replyto"],[appDelegate.tableDic valueForKey:@"loginid"],[appDelegate.tableDic valueForKey:@"fromname"],forward.text,subscribe.text,[appDelegate.tableDic valueForKey:@"mailpriority"],receivermailtext.text,body.text,[appDelegate.tableDic valueForKey:@"emailName"],[appDelegate.tableDic valueForKey:@"signature"],[appDelegate.tableDic valueForKey:@"tableName"],emailType,strEncoded,imageName.text
];
NSLog(@"SOPA%@",soapMessage);
NSURL *url = [NSURL URLWithString:@"http://www.xxx.net/xxx/xxx.asmx"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];
[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:@"http://tempuri.org/CreateTextMail" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
NSHTTPURLResponse *urlResponse = nil;
NSError *error = [[NSError alloc] init];
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&urlResponse error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"Response Code : %d",[urlResponse statusCode]);
if([urlResponse statusCode] >= 200 && [urlResponse statusCode] < 300)
{
NSLog(@"Response: %@",result);
}
if( theConnection )
{
webData = [NSMutableData data];
}
else
{
NSLog(@"theConnection is NULL");
}
[subject resignFirstResponder];
[replyto resignFirstResponder];
[loginid resignFirstResponder];
[fromname resignFirstResponder];
[emailName resignFirstResponder];
[signature resignFirstResponder];
[listName resignFirstResponder];
}
-(void)takeCamera
{
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
NSLog(@"take a photo");
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = (id)self;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
imagePicker.allowsEditing = NO;
[self presentModalViewController:imagePicker animated:YES];
newMedia = YES;
}
}
-(void)pickCameraRoll
{
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];
imagePicker.delegate = (id)self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
imagePicker.allowsEditing = NO;
[self presentModalViewController:imagePicker animated:YES];
newMedia = NO;
}
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
[self dismissModalViewControllerAnimated:YES];
if([mediaType isEqualToString:(NSString *)kUTTypeImage])
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = image;
NSData *myData = UIImagePNGRepresentation(image);
// NSLog(@"NSData : %@",myData);
[Base64 initialize];
strEncoded = [Base64 encode:myData];
NSLog(@"strEncoded : %@",strEncoded);
if(newMedia)
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil);
NSLog(@"image pick");
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeImage])
{
}
}
-(void)image:(UIImage *)image finishedSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
if(error)
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Save Failed" message:@"Failed to save image" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissModalViewControllerAnimated:YES];
}
设备中的问题是什么,它无法将图像发送到Web服务,但能够在iphone模拟器中成功发送。 任何建议都会非常有帮助。 提前谢谢。
答案 0 :(得分:3)
通过牺牲图像质量来增加压缩,可以减小图像的大小。
使用:UIImageJPEGRepresentation
UIImage *compressedImage = UIImageJPEGRepresentation(theImage, 0.5);
答案 1 :(得分:3)
对于使用以下代码解压缩图像,它会循环,直到图像大小减小到最大图像大小。
CGFloat maxCompressionFactor = 0.1f;
CGFloat compressionFactor = 0.9f;
int maxImageSize = 60 * 1024;
NSData *imageData = UIImageJPEGRepresentation(image, compressionFactor);
while ([imageData length] > maxImageSize && compressionFactor > maxCompressionFactor)
{
compressionFactor -= 0.1;
imageData = UIImageJPEGRepresentation(image, compressionFactor);
}