2

이미지 크기가 60KB를 넘으면 웹 서비스에 이미지를 게시하지 않지만 이미지 크기가 60KB 미만인 경우와 같은 문제입니다. , 웹 서비스에 게시.대물 렌즈 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]; 
} 

이다. 제안 사항은 매우 유용 할 것입니다. 미리 감사드립니다.

+0

여기서부터이 행에 지정된대로 imagename을 설정하거나 가져 오는 중 .... valueForKey : @ "tableName"], emailType, strEncoded, imageName.text]; –

+0

일부 값은 텍스트 필드이고 일부는 사전에서 가져온 값입니다. – shasha

+0

imageName.text는 textField 오른쪽입니다. 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); 
} 
관련 문제