Ответ 1
Вы говорите:
Конечно, очевидно, что для .png изображений мне нужно использовать
UIImagePNGRepresentation
и для .jpg/.jpegUIImageJPEGRepresentation
.
Нет, это не обязательно. Если у вас есть оригинальный "цифровой актив", вместо создания UIImage
, а затем используя одну из этих двух функций для создания NSData
, которую вы загрузите, вы часто просто загружаете NSData
из исходного актива и вообще обойти круговое движение до UIImage
. Если вы это сделаете, вы не рискуете потерять данные, которые преобразуются в UIImage
, а затем назад, могут вызвать.
Однако есть некоторые дополнительные соображения:
-
Метаданные:
Эти функции
UIImageXXXRepresentation
линяют изображение своих метаданных. Иногда это хорошая вещь (например, вы не хотите загружать фотографии своих детей или дорогие гаджеты, включая местоположения GPS, где недовольные могут определить, где был сделан снимок). В других случаях вы не хотите, чтобы метаданные были выброшены (например, дата исходного снимка, какая камера и т.д.).Вы должны принять явное решение относительно того, хотите ли вы метаданные или нет. Если нет, не округляйте изображение с помощью
UIImage
, а используйте исходный актив. -
Потеря качества изображения и/или размер файла:
Я особенно не сумасшедший о
UIImageJPEGRepresentation
, потому что это сжатие с потерями. Таким образом, если вы используете значениеcompressionQuality
меньше 1.0, вы можете потерять некоторое качество изображения (умеренная потеря качества для значений, близких к 1.0, более значительная потеря качества с более низкими значениямиcompressionQuality
). И если вы используетеcompressionQuality
1.0, вы уменьшаете значительную потерю качества изображения JPEG, но результирующийNSData
может часто быть больше, чем исходный актив (по крайней мере, если оригинал был сам, сжатым JPEG или PNG), что приводит к более медленной загрузке.UIImagePNGRepresentation
не вводит потерю данных на основе сжатия, но в зависимости от изображения вы все равно можете потерять данные (например, если исходный файл был 48-битным TIFF или использовал цветовое пространство, отличное от sRGB).Это вопрос о том, согласны ли вы с потерей качества изображения и/или большим размером файла во время процесса загрузки.
-
Размер изображения:
Иногда вы не хотите загружать изображение с полным разрешением. Например, вы можете использовать веб-службу, которая хочет, чтобы изображения не превышали 800 пикселей на сторону. Или, если вы загружаете миниатюру, они могут захотеть чего-то еще меньшего размера (например, 32px x 32px). Изменяя размеры изображений, вы можете сделать загрузку намного меньше и, следовательно, намного быстрее (хотя и с очевидной потерей качества). Но если вы используете алгоритм изменения размера , то создание PNG или JPEG с использованием этих функций
UIImageXXXRepresentation
будет довольно распространенным.
Короче говоря, если я пытаюсь свести к минимуму потери данных/качества, я бы загрузил исходный актив, если он в формате, который принимает сервер, и я бы использовал UIImagePNGRepresentation
(или UIImageJPGRepresentation
с качеством установка 1.0), если исходный актив не был в формате, принятом сервером. Но выбор использования этих функций UIImageXXXRepresentation
- это вопрос ваших бизнес-требований и того, что принимает сервер.