2011-12-24 2 views
-1

Я пытаюсь добавить функциональность генерации GIF в свое приложение, чтобы пользователь мог делиться своими анимированными творениями со своими друзьями и т. Д.Как я могу улучшить размер файла моего сгенерированного GIF?

В моем приложении пользователь может выбрать статическое фоновое изображение, чтобы иметь элемент drop вниз, поэтому единственной движущейся частью является элемент.

У меня есть GIF-поколение working fine using this encoder, которое основано на this code, и готовый продукт выглядит так, как я этого хочу, но если пользователь выбирает фоновое изображение, размер файла превышает мой целевой размер 3 МБ. Here is an example.

Я также предполагаю, что любые пользователи планшета получат огромные файлы, так как размер изображения - это размер вида, из которого он создан. Все GIFS составляют около 12-20 кадров, поэтому я предполагаю, что проблема связана с количеством цветов или по каким-то причинам цвета фонового изображения немного меняются от кадра к кадру.


Так что я могу получить размер файла под 3 МБ, поддерживая FPS и размеры? (Изменение кода генерации GIF/Изменение цветов фонового изображения/и т. Д.) Или, если нет, то каким будет лучший способ получить его ниже 3 МБ и по-прежнему привлекать пользователей?

Заранее благодарен! (:

EDIT: Похоже, проблема в том, что класс я использую не оптимизирует каждый кадр как дифф или треугольником последнего Любые предложения (:.?

+0

Вы проверили изображение с помощью соответствующего инструмента, который может показать вам фактическое содержимое рамки? Они должны содержать только дельта к предыдущему кадру. О, и насколько большой файл, когда вы делаете только анимацию кадра? Это тоже хороший контроль. Если проблема возникает уже с одним кадром, это фоновое изображение, которое вы выбрали. GIF не предназначен для фотографий. –

+0

Что было бы «подходящим инструментом», чтобы проверить это? –

+0

Любой инструмент, который может разобрать анимацию Gif. Например, GIMP. Осмотрите отдельные слои. –

ответ

1

Убедитесь что только первый кадр содержит полное изображение. Последующие кадры должны содержать только отличия от предыдущего кадра.Это должно превратить большую часть прозрачного кадра, которое может быть сжато намного более эффективно с помощью GIF. Проделайте следующее испытание : если вы удвоите частоту кадров - размер файла удваивается? Если это так, вы в настоящее время не кодируете только дельта.

Также поймите, что GIF не подходит для фотографий и будет создавать огромные файлы или очень плохое качество изображения.

Редактировать: Вам может потребоваться улучшить код генерации изображения, чтобы он только подавал измененные части изображения в кодировщик!

+0

Я открыл gif в GIMP, и похоже, что каждый кадр - это полное изображение, поэтому похоже, что это проблема. И да, я понимаю качественные последствия наличия GIF, но поскольку фоновое изображение является статичным, в настоящий момент оно выглядит достаточно хорошим. –

+0

Ну, 108k для первого кадра, возможно, приемлемо.Вероятно, он все еще тратит довольно небольшую полосу пропускания, но если вы не используете этот образ в «облачном масштабе», вам не нужно беспокоиться, современные интернет-линии бывают быстрыми (я все еще помню время, когда веб-страница со всеми изображениями должна была быть меньше чем 30k, чтобы загружать разумно модемами!) –

+0

Ну, моя цель тоже держать ее под 3 МБ, чтобы ее можно было загрузить в Imgur пользователем. Если бы я просто позволил им поделиться им по электронной почте/смс, все было бы хорошо. Мне нужно выяснить, может ли кто-нибудь указать мне способ добавления дельта-функции ко мне. –