Java: obtenga marcos de GIF animados sin ImageReader

Estoy desarrollando la aplicación AppEngine. Una de sus características es dividir una imagen .gif animada en marcos separados. He buscado mucho para encontrar la manera de hacerlo y finalmente encontré la solución. Desafortunadamente, la solución se basa en ImageReader y no puedo usarlo en el servidor, porque:

javax.imageio.ImageReader no es compatible con el entorno de tiempo de ejecución de Java de Google App Engine

¿Hay otras formas de decodificar una imagen GIF sin esta clase?

preguntado el 12 de junio de 12 a las 22:06

Um, ¿buscaste en Google "decodificar java gif"? -

Sí, lo hice. Los primeros enlaces son sobre la biblioteca Gif4J, pero esta biblioteca no es gratuita. Entre otros enlaces, encontré la solución con ImageReader que no me funciona como mencioné en la pregunta. -

1 Respuestas

Primero algo sobre el marco en sí. Hay dos implicaciones acerca de dividir una imagen .gif animada en marcos separados. 1) Literalmente, un marco es un marco en el sentido de un GIF animado. El problema es que los fotogramas que constituyen una imagen GIF animada están relacionados. El método de eliminación de un GIF animado dicta qué hacer con el cuadro anterior al dibujar el cuadro actual. Puede anularlo; rellene con el color de fondo antes de dibujar el nuevo marco, o puede hacer lo que crea apropiado antes de dibujar el nuevo marco. Si cree que la situación anterior es complicada, ¿qué pasa con la transparencia de los marcos? posición lógica para dibujar cada cuadro?

Si vamos por este camino, no hay necesidad de usar un ImageReader dedicado, solo lea las partes relevantes de la imagen y copie los datos de cada cuadro, guárdelo junto con un encabezado y una paleta de colores. La consecuencia es: la imagen resultante puede parecer extraña y sin sentido. Mira el ejemplo de abajo:

el primer cuadro frame0

el segundo cuadro frame1

Y el original original

Puedes ver que el segundo cuadro no se ve tan bien. La verdad es que el segundo cuadro es transparente y se construye encima del primer cuadro (este GIF animado solo contiene 2 cuadros). Se espera que vea a través del segundo cuadro y, en conjunto, hacen una animación.

Ahora veamos cuál es la segunda implicación de dividir una imagen .gif animada en marcos separados. 2) En este caso, el marco es en realidad un compuesto que se basa en los marcos anteriores y que es lo que estamos viendo cuando vemos un GIF animado. Para lograr esto, debemos tener en cuenta el historial del bucle de fotogramas, la posición lógica de cada fotograma y la transparencia de los fotogramas mismos.

Veamos qué obtenemos ahora:

el primer cuadro frame0

el segundo cuadro frame1

Ahora el primer cuadro es el mismo que en la primera situación, pero el segundo cuadro está construido sobre el primero y ya no es transparente.

En el segundo caso, tenemos que decodificar y codificar los cuadros para lograr el resultado deseado. Además de verse bien, otra cosa buena de esto es que puede guardar las imágenes resultantes en cualquier formato que admita el codificador.

Los ejemplos en esta publicación son generados por la parte relacionada con GIF de iCafé

Respondido 22 Oct 15, 00:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.