2

Проблема в том, что, когда размер изображения превышает 60 килобайт, он не размещает изображение в веб-службе, но если размер изображения меньше 60 кб , его размещение в веб-службе.Как уменьшить размер изображения в объекте c

Как уменьшить размер изображения в объективе 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]; 
} 

Что бы проблема в устройстве, где он не в состоянии отправить изображение на веб-сервис, но в состоянии успешно отправить в iPhone симулятор. Любые предложения были бы очень полезными. Спасибо заранее.

+0

С, где вы настройки или получить ImageName, как указано в этой строке .... valueForKey: @ "TABLENAME"], EmailType, strEncoded, imageName.text]; –

+0

некоторые значения из текстового поля и некоторые из словаря. – shasha

+0

imageName.text from 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); 
} 
Смежные вопросы