java animated-gif javax.imageio

java - ¿Crear GIF animado con ImageIO?



animated-gif javax.imageio (1)

¿Alguien ha logrado convencer a ImageIO para que escriba un GIF animado y, en particular, establezca los metadatos correctos? Mi primer intento es más o menos de la siguiente manera (donde b1 y b2 son imágenes con buffer):

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);

Esto parece funcionar casi, pero:

  • Claramente necesito establecer metadatos "adecuados" de alguna manera para establecer el tiempo entre las imágenes e idealmente hacerlas en bucle (estaba ingenuamente esperando que el valor predeterminado hiciera algo sensato, pero bueno ...)
  • cualquiera que sea el metadato que está escribiendo por defecto obviamente no es del todo correcto: el GIMP da un par de mensajes de error cuando carga el archivo, aunque al insertar la imagen en una página web de prueba en Firefox se muestran las dos imágenes en una sucesión muy rápida, que es tantilisingly cerca de lo que quiero ...

Si alguien tiene que escribir GIF animados de ImageIO para trabajar y puede compartir un fragmento de código de trabajo o cómo solucionar los problemas anteriores, ¡sería muy apreciado!


Me encontré con esta pregunta y decidí probarla; Tomó una cantidad pequeña pero no trivial crear una clase útil (gracias ax ), así que pensé que podría compartir el código: here hay una pequeña clase para crear una imagen animada gif a partir de una serie de otras imágenes.