Объединение кадров анимации для экономии места - PullRequest
2 голосов
/ 26 июля 2010

Я работаю над проектом, который использует много графических файлов.У нас есть около 500 PNG-файлов размером 60x60, которые содержат несколько различных анимаций (около 80) и занимают около 2 МБ пространства.В коде я просто рисую каждый кадр один за другим для визуализации анимации.Например, одна из анимаций состоит из 3 кадров, каждый размером около 4 КБ.Мой вопрос заключается в том, можем ли мы что-либо сделать, чтобы уменьшить размер этих изображений.

Мы в значительной степени полагаемся на прозрачность изображений, поэтому конвертация в JPG завершена.Конвертация в GIF была опцией, но качество отрисованных изображений было слишком низким, поэтому я не думаю, что мы можем это использовать.

PNGCrush сэкономил нам около 20 КБ для всех изображений, поэтому не сильно помог.

Между каждым кадром анимации не так много изменений в данных.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

Вы можете использовать JPEG2000 для хранения изображений.Он имеет очень хорошее сжатие и поддерживает альфа, как и PNG (и имеет режимы с потерями и без потерь), но он использует вейвлеты , которые требуют процессоры с плавающей запятой (в случае, если это проблема).

Другая возможность:

  • Преобразовать первое изображение в JPEG и альфа-канал в черно-белый JPEG.
  • Рассчитать дельту (разницу) от первой ко второйimage.
  • Сжатие дельты (снова в формате JPEG).
  • Если оно высокое с высоким качеством, уменьшите качество.
0 голосов
/ 05 сентября 2010

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

Вы также можете преобразовать все изображения в один массив больших байтов и применить к массиву вариацию LZ (LZO / ZLIB должен работать очень хорошо), это должно сэкономить, по крайней мере, 15%.

...