как работает UIImageJPEGRepresentation () - PullRequest
1 голос
/ 20 апреля 2020

Изображение 700x700 png показывает стоимость просмотра изображения в 1,88 Мб памяти, но если я сожму его с помощью UIImageJPEGRepresentation (data, 0.9), стоимость памяти уменьшится до 736 Кб, но размер изображения не изменится, пиксель jpg не имеет альфа, но стоимость памяти снизилась почти на 62%, я хочу знать, как работает UIImageJPEGRepresentation ()? THX

загрузить PNG изображение:

NSString *path = [[NSBundle mainBundle] pathForResource:@"bbb" ofType:@"png"];
NSData * data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:NULL];
UIImage * img = [UIImage imageWithData:data];

загрузить JPG изображение

NSString *path = [[NSBundle mainBundle] pathForResource:@"bbb" ofType:@"png"];
NSData * data = [NSData dataWithContentsOfFile:path options:NSDataReadingMappedIfSafe error:NULL];
UIImage * img = [UIImage imageWithData:data];
img = [UIImage imageWithData:UIImageJPEGRepresentation(img, 0.9)];

JPG Стоимость памяти:

jpg memory cost

стоимость памяти png:

png memory cost

1 Ответ

0 голосов
/ 20 апреля 2020

UIImage imageWithData: распакует файл PNG. Полученный размер соответствует разрешению:

700 пикселей × 700 пикселей × 4 байта / пиксель = 1 960 000 = 1,87 МБайт

Это изображение больше не связано с форматом PNG и метод сжатия.

Второй пример сначала распаковывает файл PNG, а затем сжимает его, используя алгоритм JPEG. Результат, разумеется, меньше на it - меньше, чем на сжатие.

И JPEG, и PNG являются алгоритмами сжатия изображений. В Интернете вы найдете много документации о том, как они работают. Это далеко не тривиально ...

...