Самый маленький формат изображения без потерь и / или библиотека?

У меня возникла проблема с размером изображения в приложении для iOS, и я обнаружил эту статью, находя решение по оптимизации размера изображения.

Прочитав его, я понял, что мне не нужно использовать только PNG или JPEG. На самом деле, я могу использовать любой формат изображения, который по умолчанию не поддерживается на платформе iOS. Потому что, если я могу получить настоящие пиксели, преобразовать их в UIImage через CGImage будет просто. Я могу использовать специальный растровый формат и специальный декодер. Например, существует метод под названием атлас текстур, который хранит множество изображений в большом растровом изображении и может сэкономить дополнительные дублированные сегменты.

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

Было бы неплохо, если бы это было с открытым исходным кодом, но я не возражаю, если бы это было проприетарное платное решение с закрытым исходным кодом. Мне нужно только отличное сжатие изображений, а не исходный код. Конечно, его можно использовать на платформе iOS, поэтому он должен предлагать декодер, который можно использовать на языках C, C+ или Objective-C. (Мне не нужен кодировщик на этой платформе)


person eonil    schedule 23.03.2012    source источник
comment
Любой алгоритм сжатия изображений будет работать лучше на одних изображениях, чем на других. С какими изображениями вы работаете (фотографии, штриховые рисунки, отсканированный текст и т. д.)?   -  person Adam Mihalcin    schedule 23.03.2012
comment
Какое изображение вы сжимаете? PNG обычно считается достаточно хорошим для таких вещей, как скриншоты. А на iPhone вычислительная мощность может быть ограничением.   -  person Potatoswatter    schedule 23.03.2012
comment
@Adam Мои изображения в основном представляют собой элементы пользовательского интерфейса. Обычно графика рисуется такими инструментами, как Photoshop или Illustrator. Не фотографии. Но обычно он может иметь уровень детализации фотографии.   -  person eonil    schedule 23.03.2012
comment
@Potatoswatter Большинство изображений, которые я использую, являются элементами пользовательского интерфейса. И меня не волнует стоимость кодирования, потому что я не кодирую его на устройстве, но стоимость декодирования должна быть доступной. Я имею в виду, что он не должен быть сверхбыстрым, как софт-реалтайм, но его использование не должно занимать минуты. Например, если для загрузки огромного атласа требуется несколько минут, необходимо поддерживать более быструю загрузку части изображения.   -  person eonil    schedule 23.03.2012
comment
@Eonil: интерфейс как кнопки? Это на самом деле не объясняет, как они выглядят. Кнопка может быть сплошным цветом, фотографией или чем угодно. Точно так же в атласе может быть много фотографий или просто сплошных карт с линиями здесь и там.   -  person Potatoswatter    schedule 23.03.2012
comment
@Potatoswatter Вот что я имею в виду. Это может быть что угодно, поэтому я предполагаю, что это фотография, потому что она обычно имеет высокую детализацию и менее последовательную. И многие оптимизации с учетом содержимого я выполнял вручную. Если кнопка растянута градиентом, я использую текстуру шириной 1 пиксель.   -  person eonil    schedule 23.03.2012


Ответы (2)


Разные изображения имеют разное сжатие. С JPEG вы жертвуете качеством ради меньшего размера, а с PNG 24 вы получаете альфа-прозрачность. Что вас, вероятно, больше интересует, так это получение изображения наименьшего возможного размера для используемого вами формата. Для этого есть 2 хороших инструмента командной строки. Вам нужно поиграть с разными типами, такие программы, как Photoshop, позволяют легко увидеть, какой из них самый маленький. Как только вы нашли оптимальный формат, вы можете использовать «smasher» для удаления посторонних данных, которые не нужны изображению, но часто добавляются редактором. Ниже приведены две утилиты командной строки, которые я использую, чтобы мои изображения были как можно меньше при создании веб-сайтов, но они также полезны для любого приложения.

optipng: http://optipng.sourceforge.net/ jpegoptim: https://github.com/glennr/jpegoptim#readme

оба можно легко установить с помощью доморощенного: http://mxcl.github.com/homebrew/ и я Я бы предположил, что есть вариант и для macports.

Там также на основе C, поэтому любой из них можно использовать в проекте iOS.

person Chris    schedule 23.03.2012

Если вы хотите оптимизировать JPEG, я бы выбрал http://jpegmini.com.

Если вы хотите отказаться от JPEG и PNG, вы можете попробовать Google WebP (http://code.google.com/speed/webp/), но я понятия не имею, есть ли для него какие-либо библиотеки iOS и есть ли они. хороши.

person Andy Davies    schedule 23.03.2012