Пакетная оптимизация PNG для отображения iphone/ipad, как это делает xcode

Я работаю над средством просмотра журналов для iPad и борюсь с производительностью.

Я понял, что самая дорогая часть отображения png - это процесс загрузки. Я знаю, что xcode способен оптимизировать png во время сборки, и такие образы загружаются намного быстрее. Но я не могу включить все изображения в сборку, так как она будет огромной.

Знаете ли вы, как оптимизировать произвольный png, не включая его в процесс сборки?

Знаете ли вы, какой формат лучше для iPhone? Я думаю, что pngs должен использовать цветовую схему RGB-8888, но я не уверен, что еще важно.

Может быть, вы знаете точные параметры для imagemagick?

7 ответов

Решение

Я думаю, что нашел хорошую статью об оптимизации png для iphone: http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html

Похоже, что xcode использует эту команду:/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/iphoneos-optimize

Похоже, что приведенная выше команда использует модифицированную версию pngcrush для оптимизации png и преобразования цветовых каналов:/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush -iphone -f 0 orig.png optimized.png

И оптимизация действительно полезна. У меня загрузка изображений в 5 раз быстрее!

Наилучшие из известных мне результатов достигаются с помощью ImageOptim, который я использую для PNG, которые не развертываются через XCode. Оно использует pngcrush и некоторые другие инструменты оптимизации PNG для достижения наилучшего сжатия. Насколько я знаю, он не использует альфа-предварительное умножение и замену байтов. ImageOptim также имеет приятный графический интерфейс с поддержкой перетаскивания и может разбивать несколько файлов одновременно.

Мы использовали Pngcrush для сжатия огромного количества PNG. Вы можете попробовать это тоже. А также, если вам не нужна прозрачность, тогда вместо PNG вы можете попробовать и JPG. Но вы можете пройти ряд проб и ошибок, сравнивая размер и качество компромисса много раз.

Я экспериментировал с pngnq, pngquant, pngcrush, optipng и т. Д.

Для моего набора PNG я достиг минимального размера файла с помощью pngquant, pngnq и pngcrush

Dir.glob("**/*.png").each do |file|
  ['pngnq -e .png -f', 'pngquant -f -speed 1 -ext .png', 'pngcrush'].each do |command|
    puts "#{command} #{file}"
    `#{command} #{file}`
  end
end

Более подробная информация по адресу: http://l4u.github.com/blog/2012/04/02/optimizing-file-sizes-of-png-images/

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

Лучший способ уменьшить размер файла PNG - конвертировать его в формат PNG8+alpha - это можно сделать пакетно с помощью pngquant (или настроить вручную с помощью графического интерфейса).

Однако, если в вашем случае преобразование из RGBA в предварительно умноженное BGRA занимает больше всего времени, тогда форк AdvanceCOMP с добавленными проприетарными расширениями XCode позволит вам пакетно конвертировать PNG в собственный формат iOS.

У меня много места с помощью pngnq, но я не проводил никаких тестов, чтобы увидеть, замедляет ли декодирование изображения вообще.

Попробуйте http://texturepacker.com/

Он может не только оптимизировать PNG, но и уменьшить цвета, например, до RGBA4444 или RGB565, что значительно уменьшает размер пинга и улучшает рендеринг на устройствах.

Вы также можете экспортировать файлы PVR для устройств, которые его поддерживают (например, iOS, некоторые Android)

А также поддерживает уменьшение изображений для устройств с низким разрешением.

Другие вопросы по тегам