Создание анимированного GIF с ImageIO? - PullRequest
23 голосов
/ 22 апреля 2009

Кто-нибудь смог убедить ImageIO написать анимированный GIF и, в частности, установить правильные метаданные? Моя первая попытка примерно такая (где b1 и b2 - BufferedImages):

ImageTypeSpecifier spec = new ImageTypeSpecifier(b1);
ImageWriter wr = ImageIO.getImageWriters(spec, "GIF").next();
wr.setOutput(ImageIO.createImageOutputStream(new File("C:\\Flashing.gif")));
ImageWriteParam param = wr.getDefaultWriteParam();
IIOMetadata meta = wr.getDefaultImageMetadata(spec, param);
wr.prepareWriteSequence(meta);
wr.writeToSequence(new IIOImage(b1, null, null), param);
wr.writeToSequence(new IIOImage(b2, null, null), param);

Это, кажется, почти работает, но:

  • Мне явно нужно каким-то образом установить «правильные» метаданные, чтобы установить время между изображениями, и в идеале сделать их зацикленными (я наивно надеялся, что по умолчанию будет что-то разумное, но эй ...)
  • какие бы метаданные он ни записывал по умолчанию, он явно не совсем прав: GIMP выдает пару сообщений об ошибках при загрузке файла, хотя при вставке изображения на тестовую веб-страницу в Firefox эти изображения отображаются очень быстро, который близок к тому, что я хочу ...

Если кто-то получил на работу анимированные GIF-файлы из ImageIO и может поделиться фрагментом рабочего кода или узнать, как решить вышеуказанные проблемы, это будет с благодарностью!

1 Ответ

30 голосов
/ 26 апреля 2009

Я наткнулся на этот вопрос и решил попробовать его; Потребовалось небольшое, но нетривиальное количество, чтобы создать пригодный для использования класс (спасибо ax ) - поэтому я подумал, что могу поделиться кодом вокруг: здесь - это небольшой класс для создания анимированного GIF изображение из ряда других изображений.

...