2

问题就像当图像大小超过60 kb时,它不会将图像发布到Web服务,但如果图像大小小于60 kb ,它发布到Web服务。如何减小目标中图像的大小c

如何在目标c中减小图像的大小。 以下是我在用的将是设备,它未能将图像发送到网络服务的问题,而是能在iPhone模拟器成功发送的代码,

-(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]; 
} 

。 任何建议都会非常有帮助。 在此先感谢。

+0

从哪里设置或获取该行中指定的imagename .... valueForKey:@“tableName”],emailType,strEncoded,imageName.text]; –

+0

一些来自文本字段的值和一些来自字典的值。 – shasha

+0

imageName.text来自textField right。您是否在imageName文本字段中键入图像名称,或者您从其他位置将其取回 –

回答

3

图像的大小可以通过增加压缩而牺牲图像质量来降低。

用途:UIImageJPEGRepresentation

UIImage *compressedImage = UIImageJPEGRepresentation(theImage, 0.5); 
+1

其中0.5是压缩。它的范围是从0-1。 0是最大压缩率(最低质量)。 –

2

对于解压缩图像使用下面的代码,它循环直到图像尺寸减小到最大图像尺寸。

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); 
}