2017-02-21 2 views
3

Я работаю над приложением, которое позволяет пользователям выбирать фотографию из галереи. Проблема, с которой я сталкиваюсь, очень странная, поскольку размер фотографии (с точки зрения хранения) изменяется, когда его подбирают с помощью UIImagePickerController.UIImagePickerController возвращает больше Изображение, отличное от оригинала

В моем случае я получил изображение через воздушную каплю. Размер изображения - 8,7 МБ. но когда я выбираю то же изображение через UIImagePickerController, он возвращает мне изображение ~ 13 МБ.

Примечание: разрешение изображения остается неизменным ([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, в случае, если вы хотите, чтобы проверить это для себя.

Почтовый файл также содержит образцы фотографий.

Любая помощь приветствуется.

+0

Пожалуйста, добавьте вычисление, которое гласит что вы ожидаете быть равным чему. – danh

+0

этот ответ решает проблему. http://stackoverflow.com/a/38475923/1120688 – harshitgupta

ответ

0

Это потому, что вы получаете изображение без сжатия из сборщика (как UIImage). Затем вы конвертируете его в jpeg с UIImageJPEGRepresentation(), и вы передаете 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

Смежные вопросы