Почему размер изображения увеличивается после UIImagePNGRepresentation?

У меня есть файл изображения в моем приложении для фотографий iphone.

Я взял его на свой макбук через аирдроп и проверил размер изображения = 1,9 МБ.

Я сохранил то же изображение в приложении «Файлы» на iphone и проверил размер изображения = 1,9 МБ.

Я взял то же изображение в свое приложение черезUIImagePickerController,

  • Использовал UIImagePNGRepresentation и распечатал количество данных/количество байтов = 15,8 МБ
  • Использовал UIImageJPEGRepresentation с коэффициентом сжатия 1.0 и распечатал количество данных/количество байтов = 5,4 МБ.
  • Использовал UIImagePNGRepresentation и сохранил его в локальном (DocumentsDirectory) и проверил размер файла = 15,8 МБ.
  • Использовал UIImageJPEGRepresentation с коэффициентом сжатия 1.0 и сохранил его в локальном каталоге (DocumentsDirectory) и проверил размер файла = 5,4 МБ.

Теперь мой вопрос: почему UIImagePNGRepresentation ИЛИ UIImageJPEGRepresentation увеличивает размер файла до такого большого размера? Я даже загрузил это изображение на свой сервер и, очевидно, получил изображение большего размера. Я хотел загрузить данное изображение на свой сервер с исходным качеством, но мне не нужно изображение такого большого размера (поскольку его фактический размер на устройстве полностью отличается), есть ли другой способ, с помощью которого мы можем предотвратить исходный размер и качество изображения обе?.




Ответы (1)


Возьмем этот пример из сеанса WWDC 2018 — 416_ios_memory_deep_dive. Если у вас есть изображение размером 590 КБ, размер изображения составляет 2048 пикселей x 1536 пикселей. Таким образом, общая память этого изображения составляет 10 МБ (2048 пикселей x 1536 пикселей x 4 байта на пиксель). Для получения более подробной информации вы можете посмотреть это видео. https://developer.apple.com/videos/play/wwdc2018/416/< /а>

person Alex L    schedule 31.08.2018
comment
Спасибо @Alex L, я посмотрел полное видео WWDC и понял причину этой проблемы. Но я просто хочу получить изображение из imagepickercontroller, показать его пользователю, как только пользователь подтвердит, а затем загрузить на мой сервер (через multipart). Теперь, если я загружаю это изображение (рендеринг), я также получаю этот больший размер на сервере. Есть ли способ, с помощью которого я мог сделать изображение другим и загрузить другое изображение (с фактическим размером файла). Даже если я сохраняю изображение после рендеринга, размер моего файла остается таким же, как и у визуализированного. - person Mehul Thakkar; 04.09.2018