2015-03-04 4 views
1

создать UIImage с помощью метода imageWithData:imageWithData размер изображения станет больше?

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
UIImage *chosenImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
NSData *data1 = UIImageJPEGRepresentation(chosenImage, 1); 
NSData *data2 = UIImageJPEGRepresentation(chosenImage, 0.5); 
NSLog(@"data1 = %lu;;;;;;;data2 = %lu",[data1 length],[data2 length]); 

UIImage *nimg = [UIImage imageWithData:data2]; 
NSData *data30 = UIImageJPEGRepresentation(nimg, 1); 
NSData *data31 = UIImageJPEGRepresentation(nimg, 0.8); 
NSLog(@"data30 = %lu;;;;;;data31 = %lu;;;;;;",[data30 length],[data31 length]); 
} 

я получаю этот выход:

data1 = 1751828;;;;;;;data2 = 254737 

data30 = 1368455;;;;;;data31 = 387174;;;;;; 

Почему data30 чем data2 намного больше?

+0

Вы можете улучшить свой вопрос, указав, почему вы удивлены; неясно, (и почему) вы ожидаете, что эти цифры будут одинаковыми или что-то еще, или ... (хотя я предполагаю, что вы ожидаете, что они будут похожи, поскольку чистое «качество изображения» о том же самом). –

ответ

4

Поскольку он по-прежнему представляет собой изображение этого разрешения, которое хранится с наименьшим количеством потерь данных, которое позволяет JPEG.

Настоящая (несовершенная) аналогия. Представьте, что вы взяли компакт-диск (полный качественный звук) и копировали его в очень некачественный MP3-файл. Этот файл был бы очень маленьким и звучал бы ужасно. Теперь запишите этот файл MP3 на CD-R, используя iTunes. Если вы играете на этом компакт-диске, он все равно будет звучать ужасно, но это полная память ужасных звуковых данных. Теперь копируйте этот CD-R в высококачественный MP3. Ожидаете ли вы, что он будет иметь тот же размер, что и низкокачественный MP3, с которым вы записали CD? Нет, потому что вы просите iTunes кодировать звуковой сигнал полного размера с очень высоким качеством. Вы много работаете над тем, чтобы «сохранить» высокое качество, что - это потоковый поток данных.

То же самое с вашими фотографиями. Вы принимаете оригинальное растровое изображение с некоторым разрешением X * Y. Вы кодируете его очень с легкостью, который предназначен для небольшого объема дискового пространства, выкидывая кучу информации. Затем вы декодируете это, возвращаясь к полному растровому размеру размера X * Y, который теперь имеет свой собственный набор (разных) сложностей, которые возникли из-за сжатия. Затем вы кодируете , что bitmap на очень высокое качество. Который сохранит почти всю свою видимую сложность, но все равно будет выглядеть кратким.

(Вы видите существенное различие между вашим data1 и data30, которая ближе яблоки с яблоками сравнения здесь. data1 является то, что происходит, когда вы держите как можно больше информации, так как позволяет JPEG. Падение в размере до data30 является показывая, что вы потеряли, когда вы прошли этап кодирования в data2.)

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