2017-02-21 9 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

関連する問題