Как стать автором
Обновить

Комментарии 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-файлы в формат, готовый к быстрой загрузке в видеопамять без конвертации. Таким образом, снимая этот флажок, вы обязываете рантайм девайса заниматься доп. работой.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации