Пакетная оптимизация 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)
А также поддерживает уменьшение изображений для устройств с низким разрешением.