2017-02-21 4 views
3

사용자가 갤러리에서 사진을 선택할 수있는 앱을 개발 중입니다. 내가 직면하고있는 문제는 UIImagePickerController를 사용하여 사진을 찍었을 때 (사진의 크기면에서) 사진의 크기가 변할 때 매우 이상합니다.UIImagePickerController가 원본보다 큰 이미지를 반환합니다.

내 경우 에어 드롭으로 사진을 찍었습니다. 이미지 크기는 8.7MB입니다. 하지만 UIImagePickerController를 통해 동일한 이미지를 선택하면 ~ 13MB의 이미지를 반환합니다.

참고 : 이미지의 해상도는 동일하게 유지됩니다 ([3024, 4032]).

매우 간단한 앱을 만들어 테스트 해 보았습니다.

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> 

@end 

ViewController.m

#import "ViewController.h" 

@implementation ViewController 

bool flag = true; 

- (void)viewDidAppear:(BOOL)animated { 
    if (flag) { 
     flag = false; 
     UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
     picker.delegate = self; 
     [self presentViewController:picker 
          animated:YES 
         completion:NULL]; 
    } 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; 
    NSData *temp = UIImageJPEGRepresentation(chosenImage, 1); 
    NSLog(@"image: %lu", (unsigned long)temp.length); 
    NSLog(@"image: [%lu, %lu]", (unsigned long)chosenImage.size.width, (unsigned long)chosenImage.size.height); 
    [picker dismissViewControllerAnimated:YES completion:NULL]; 
} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 
    [picker dismissViewControllerAnimated:YES 
           completion:NULL]; 
} 

@end 

this is the link to the app, 당신은 스스로를 테스트 할 경우 : 다음 샘플 코드입니다.

zip 파일에는 샘플 사진도 포함되어 있습니다.

도움을 주시면 감사하겠습니다.

+0

내용의 계산을 추가하세요 당신이 무엇과 동등 할 것으로 기대하는지. – danh

+0

이 대답은 문제를 해결합니다. http://stackoverflow.com/a/38475923/1120688 – harshitgupta

답변

0

이미지를 UIImage로 선택하지 않아도됩니다. UIImageJPEGRepresentation()을 사용하여 jpeg로 변환하면 최고 품질 (최소 압축) 인 압축 품질로 1.0을 전달합니다. 품질에 0.5와 같이 낮은 숫자를 전달하면 결과 데이터가 더 작아집니다. 참조 : https://developer.apple.com/reference/uikit/1624115-uiimagejpegrepresentation?language=objc

갱신 당신이 UIImagePickerControllerReferenceURL을 사용할 수있는 원본 파일 데이터를 원하는 경우

여기를 참조 : How do I get the data from UIImagePickerControllerReferenceURL?

+0

첫 번째 답변이 잘못되었습니다. 나 자신이 이미지를 압축하거나 다른 것을 만지기를 원하지 않기 때문에. 내가 사용하여 내 문제를 해결 http://stackoverflow.com/a/38475923/1120688 – harshitgupta

0

이 코드를 참조하십시오

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info 
    { 
     UIImage* chosenImage = [info valueForKey:@"UIImagePickerControllerOriginalImage"]; 

     NSLog(@"Image Size Width %f Height %f",chosenImage.size.width,chosenImage.size.height); 

     UIGraphicsBeginImageContext(CGSizeMake(320, 480)); 
     [originalImage drawInRect:CGRectMake(0,0,320,480)]; 
     UIImage* image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     NSLog(@"image Size h %f Width %f",[image size].height, [image size].width); 

    } 
+0

대답 주셔서 감사하지만 그것은 작동하지 않습니다. – harshitgupta

관련 문제