Pull to refresh

Comments 20

Приятно видеть, что моим проект пользуются даже при создании игр для ios.
Я никогда не писал приложений под ios, но если не ошибаюсь, то приложения запакованы zip (метод сжатия Deflate), а если это так, то их можно и перепаковать и применить более мощный уровень сжатия.
Вообще может напишу статью про оптимизацию zip, т.к. очень много проектов используют именно его.
Да, перед отправкой на AppStore все еще жмется zip'ом и действительно можно попробовать поиграться с настройками оного. Спасибо, попробую и отпишусь о результатах.
Я уже думал об этом, но тут не важно что мы отправим в Apple, т.к. Apple все равно перепаковывает билд перед тем, как выкладывать. Они меняют подписи, добавляют пару файлов. Не уверен, но возможно добавляют большую иконку. Обычно у меня билд становится на пару метров больше в iTunes, потому стараюсь отправить билд до 17Мб. Если перепаковать билд и за счет сжатия сделать его даже 10Мб — это, по идее, ничего не даст в конечном итоге. Возможно я не прав.
По поводу картинок есть много нюансов. Если картинок много, то можно их сложить в атласы, и на лету создавать нужные картинки. Атласы в свою очередь (да и отдельные картинки) — можно сделать так — альфа канал пожать в jpeg (можно поиграть со степень сжатия — но и 60% зачастую хватает), а сами png без альфа канала пожать в 8 битные если палитра позволяет. Опять же собирать в нормальные png на лету.
О, а можете рассказать, что за софт так может делать / как это использовать из кода? Слышал про TexturePacker, но он вроде только для cocos'а.
Я боюсь разочарую. Картинки изначально сохраняются отдельно прозрачность в jpeg отдельно остельное в png. Далее pnglib и jpeglib — получаем цвета в виде массивов, накладываем — и собираем из этого в памяти новую png, собираем ее без сжатия — там простой при этом формат получается — все и дальше грузим ее.
Т.е. никакой автоматизации.
В староглиненные времена написал набросал побыстрому скрипт для фотошопа который аталасы генерировал)
Правда как правило получается удобнее генерировать атлас в рантайме. Особенно когда нужно рисовать буковки.
Получается что-то типа вот такого:

GLAtlasGenerator *gen = [[GLAtlasGenerator alloc] init];
[gen addImageNamed:@"name.png" withKey:@"name"];
[gen addImageNamed:@"name2.jpeg" withAlphaImageNamed:@"name2_alpha.jpeg" withKey:@"name2"];
[gen addCharsFromString:numbers fontPrefix:@"numbers" font:fontNumbers];
...
fontsTexture = [gen buildTextureWithFormat:GL_RGBA];
[gen release];

Весь профит в том что фонт может быть кастомный. И в атлас можно добавлять только используемые буквы.
Работает сие дело относительно быстро. Для расположения картинок — используется простейший BSP алгоритм (вроде так зовется).
Андрей, за статью про правильное использование атласов буду очень благодарен ;)
Если Вы не поддерживаете версии iOS 4.2 ниже, то можно отключить компиляцию для armv6 — iPhone 3G и ниже. Это в половину уменьшит размер приложения, нетто (без ресурсов и прочего мусора).
В принципе можно отключить компиляцию в armv7 — и будет работать везде! Мы так делали с парой игр. Работает на всем, даже iPhone 4s и iPad2. Сэкономило метров 5.
Спасибо, хороший способ, у меня приложение похудело еще на 1,5 Мб!
А получится залить такое приложение в AppStore? Меня послало.
минимальная версия iOS (Deployment Target) должна быть 4.3 так как 4.2 еще iPhone 3G поддерживает, который на armv6.
Размер приложения больше зависит от дизайнера, от выбора метода и степени сжатия.
Jpg обладает одной из наиболее оптимальной ( размеру \ качеству) компрессией учитывая близлежащие области, то есть некоторый интеллектуальный алгоритм.
PNG сжимает по алгоритму LZW схожему с gif.
если у вас png весит в 2 раза меньше то возможно дело в том, что вы неверно сохранили сам jpg. Сохранять необходимо через save to web, отключить галочки с вписыванием информации.
Спасибо!
Как раз уперся в 20-мегабайтное ограничение — и тут такой подгон.
Использовал п.2 и п.3 — сэкономил около 3 МБ

По поводу п.1 — именно так и сделал, пришлось вставить только несколько новых файлов -бэкграунды, заточенные по 1024х768.

А насчет
поэтому можно не делать новых картинок, а грузить их напрямую c префиксом @2x.

Это прокатит только если ВЕСЬ арт грузить из кода. С xib-ами такой финт не пройдет.
Я делал симлинки на @2x файлы с новым префиксом, а потом прошелся автозаменой по ксибам
Вообщето если в IB написать «имя@2x.png» то будет грузится именно эта картинка.
Таким образом для iPhone и iPhone Retina — интерфейс можно нарисовать в одном xib, а для iPad — в файлике с постфиксом ~ipad.
предложу еще один вариант экономии, который я использую на картинках. Когда фон залит регулярным паттерном, можно не делать огромную картинки 640х960 (или 1024х768 для iPad), а вырезать минимальную область и затайлить ее self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@«tiledBack.png»]];
«убрать опцию Compress PNG Files» — этот совет немного снизит производительность загрузки картинки. Дело в том, что последовательность компонент R-G-B не одинакова в PNG-формате и видео-чипе айфона. Поэтому Xcode конвертируется PNG-файлы в формат, готовый к быстрой загрузке в видеопамять без конвертации. Таким образом, снимая этот флажок, вы обязываете рантайм девайса заниматься доп. работой.
Sign up to leave a comment.

Articles