Кто-нибудь смог убедить 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 и может поделиться фрагментом рабочего кода или узнать, как решить вышеуказанные проблемы, это будет с благодарностью!