Когда использовать PNG или JPG в разработке iPhone?

У меня есть приложение, которое отобразит кучу изображений в слайд-шоу. Эти изображения будут частью пакета, таким образом распространяются вместе с приложением.

Все изображения являются фотографиями или фотографиями и т.д.

Я читал, что предпочитал использовать PNG в качестве формата изображения, но, увидев, что версия JPG будет намного меньше, я бы предпочел использовать ее.

Существуют ли какие-либо руководства, которые будут использоваться в формате и в каком случае?

Ответ 1

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

JPG меньше для хранения, но потеря (количество зависит от уровня сжатия), а для их отображения требуется гораздо более сложный алгоритм декодирования. Но типичного сжатия и качества изображения обычно достаточно для фотографий.

Используйте JPG для фотографий и для чего-то большого, и PNG для чего-нибудь маленького и/или предназначенного для отображения "пиксель совершенный" (например, маленькие значки) или как часть композитного прозрачного наложения и т.д.

Ответ 2

Apple оптимизирует изображения PNG, которые включены в комплект вашего iPhone-приложения. Фактически, iPhone использует специальную кодировку, в которой байты цвета оптимизированы для аппаратного обеспечения. XCode обрабатывает эту специальную кодировку для вас, когда вы строите свой проект. Таким образом, вы видите дополнительные преимущества использования PNG на iPhone, отличном от их размера. По этой причине определенно рекомендуется использовать PNG для любых изображений, которые отображаются как часть интерфейса (в виде таблицы, меток и т.д.).

Что касается отображения полноэкранного изображения, такого как фотография, вы все равно можете воспользоваться преимуществами PNG, поскольку они не потеряны, а визуальное качество должно быть лучше JPG, не говоря уже об использовании ресурсов при декодировании изображения. Возможно, вам нужно будет уменьшить качество вашего JPG, чтобы увидеть реальную выгоду в размере файла, но затем вы показываете неоптимальные изображения.

Размер файла, безусловно, является фактором, но при выборе формата изображения есть и другие соображения.

Ответ 3

В PNG есть одна важная вещь. Если PNG включен в вашу сборку Xcode, он будет оптимизирован для iOS. Это называется подавлением PNG. Если ваш PNG загружается во время выполнения, он не будет раздавлен. Разбитые PNG работают примерно так же, как 100% JPG. Более качественные JPG работают лучше, чем более качественные JPG. Таким образом, с точки зрения производительности от самых быстрых до самых медленных, это будет качество JPG низкого качества, высокое качество JPG, PNG Crushed, PNG.

Если вам нужно скачать PNG, вы должны рассмотреть возможность раздавливания PNG на сервере перед загрузкой.

http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/

Ответ 4

Блог Cocoanetics опубликовал хороший ориентир производительности iOS в JPG на разных уровнях качества и PNG, без дробления.

Из своего заключения:

Если вам абсолютно необходим альфа-канал или вы должны пойти с PNG, тогда рекомендуется установить инструмент pngcrush на ваш веб-сервер и попросите его обработать все ваши PNG. Почти во всех других случаях высокое качество JPEG файлы объединяют меньшие размеры файлов (то есть более быструю передачу) с более быстрое сжатие и рендеринг.

Оказывается, PNG отлично подходят для небольших изображений, которые вы использовали бы для элементов пользовательского интерфейса, но они нецелесообразно использовать для каких-либо полных таких как каталоги или журналы. Там вы хотели бы выбрать качество сжатия от 60 до 80% в зависимости от вашего исходный материал.

С точки зрения получения всего, чтобы отобразить, вы захотите висеть на Экземпляры UIImage, из которых вы нарисовали один раз, потому что у них есть кэшированная несжатая версия файла в них. И где вы не визуальная пауза для большого изображения, появляющегося на экране, у вас будет чтобы заставить декомпрессию для нескольких изображений заранее. Но нести помните, что это потребует больших объемов оперативной памяти, и если вы переусердство, которое может привести к прекращению вашего приложения. NSCache - это отличное место для размещения часто используемых изображений, потому что это автоматически заботится о выводе изображений, когда ОЗУ становится недостаточным.

К сожалению, мы не имеем никакого способа узнать, изображение все еще нуждается в распаковке или нет. Также изображение может иметь вытеснил несжатую версию, не сообщив нам об этом эффект. Это может быть хорошим радаром, чтобы поднять отчет об ошибках в Apples сайт. Но, к счастью, доступ к изображению, как показано выше, не требует времени если изображение уже распаковано. Так что вы могли бы просто сделать это не только "как раз вовремя", но также "на всякий случай".

Ответ 5

Просто подумал, что я поделился бы небольшими данными об эффективности декомпрессии...

Я делаю прототипирование 360-градусного зрителя - карусели, где пользователь может прокручивать серию фотографий, сделанных под разными углами, чтобы создать впечатление плавного поворота объекта.

Я загрузил данные изображения в массив NSData, чтобы извлечь файл из системы, но создаю NSImage на лету. Тестирование при почти максимальной частоте кадров (~ 25 кадров в секунду) и наблюдении в инструментах. Я вижу, что приложение явно связано с процессором, и примерно на 10% увеличивается загрузка ЦП, показывающая ~ 275 кб по сравнению с ~ 75 кбайт jpg.

Я не могу сказать точно, но я предполагаю, что предел ЦП - это только от общего выполнения программы и перемещения всех данных в памяти, но это декомпрессия изображения выполняется на графическом процессоре. В любом случае аргумент производительности JPG и PNG выглядит в пользу JPG, особенно когда учитываются меньшие размеры файлов (и, следовательно, меньшие размеры объектов в памяти, по крайней мере, в некоторых частях цепочки).

Конечно, каждая ситуация другая, нет замены для тестирования...

Ответ 6

Я обнаружил значительные различия в производительности анимации при использовании jpegs vs png. Например, размещение трех экранов размером в jpeg бок о бок в UIScrollView и прокрутка по горизонтали на iPhone4 приводит к задержке и совершенно неприятной отрывистой анимации. С непрозрачными png с одинаковыми размерами прокрутка гладкая. Я никогда не использую jpegs, даже если изображение велико.

Ответ 7

Я думаю, что если вы хотите использовать прозрачный, у вас нет выбора, кроме PNG. Но если ваш фон уже непрозрачен, тогда вы можете использовать JPG. Это единственное отличие, которое я вижу