Неужели кому-то удалось убедить ImageIO написать анимированный GIF и, в частности, установить правильные метаданные? Моя первая попытка примерно следующим образом (где b1 и b2 BufferedImages):Создание анимированного GIF с ImageIO?
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);
Это, кажется, почти работа, но:
- я явно нужно каким-то образом установить «правильный» метаданные, чтобы установить время между изображениями и идеально сделать их петлями (я наивно надеялся, что дефолт сделает что-то разумное, но hey ...)
- любые метаданные, которые он пишет по умолчанию, явно не совсем прав: GIMP дает пару ошибок сообщения при загрузке файла, хотя вложение изображения на тестовую веб-страницу в Firefox показывает отображение tw O изображения в очень быстрой последовательности, которая tantilisingly близко к тому, что я хочу ...
Если кто-то получил писать анимированные GIF-файлы из ImageIO работать и может поделиться фрагмент рабочего кода или как исправить вышеуказанные проблемы , было бы весьма полезно!
В примере, представленном в функции main(), есть ошибка. Комментарии скажут: '// последовательность gif с типом первого изображения, 1 секунда между кадрами, которая непрерывно петляет', что будет« новым GifSequenceWriter (output, firstImage.getType(), 1000, true) »вместо 'new GifSequenceWriter (output, firstImage.getType(), 1, false)' – gvlasov
Кроме того, если вы обнаружите, что прозрачные цвета не обрабатываются должным образом (когда вы пишете прозрачный цвет, пиксель из предыдущего кадра сохраняет себя), вам нужно для этого: найдите строку с 'graphicsControlExtensionNode.setAttribute (" disposMethod "," none ");' и измените '' none "' на '" restoreToBackgroundColor "' – gvlasov
Ваш код по-прежнему ссылается на stackoverflow [4 года спустя] (http://stackoverflow.com/questions/16649620/is-there-a-way-to-create-one-gif-image-from-multiple-images-in-java), и я планирую использовать его 7 лет спустя:) – Aaron