Lire toutes les images d'un gif animé

Soyez le premier à donner votre avis sur cette source.

Snippet vu 33 442 fois - Téléchargée 26 fois

Contenu du snippet

Une petite source montrant comment lire toutes les images d'un gif animé...

(je sais pas si ça deja été posté... pourtant j'ai cherché! désolé aux admins sinon... :)

Source / Exemple :


/**

  • lit les images d'un gif animé
@param f l'image gif @return le tableau d'images ou null si erreur
  • /
public static BufferedImage[] readGifImages(String f) { BufferedInputStream in=null; //stream image ImageInputStream stream = null; try { in=new BufferedInputStream(new FileInputStream(new File(f))); stream = ImageIO.createImageInputStream(in); } catch (IOException e) { return null; } //reader d'image ImageReader r=getReader("GIF"); if (r==null) return null; //tableau dynamique des images lues ArrayList<BufferedImage> img=new ArrayList<BufferedImage>(); try{ r.setInput(stream,true,true); ImageReadParam param = r.getDefaultReadParam(); //lecture des images try{ int i=0; //on lit tant qu'il y a pas d'exceptions ! while(true) { //lecture et ajout img.add(r.read(i,param)); i++; } }catch(Exception e2) {} r.dispose(); in.close(); }catch(Exception e) { return null; } //retourne un tableau return img.toArray(new BufferedImage[img.size()]); } /**
  • donne le reader correspondant au format
@param format le format désiré (voir ImageIO.write) @return le reader correspondant ou null si erreur
  • /
private static ImageReader getReader(String format) { Iterator readers = ImageIO.getImageReadersBySuffix(format); if (readers.hasNext()) { ImageReader reader = (ImageReader) readers.next(); return reader; } return null; }

Conclusion :


Ne pas oublier les import :

import java.io.*;
import javax.swing.*;
import javax.imageio.*;
import javax.imageio.stream.*;
import java.util.*;
import java.awt.image.*;

Pour charger une image gif, suffit d'executer par exemple readGifImages("chat.gif") pour avoir toutes les images du gif animé chat.gif

A voir également

Ajouter un commentaire

Commentaires

pumbaa666
Messages postés
24
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
19 janvier 2010
-
Tient, je suis tombé par hasard sur cette source, et elle est tout à fait interessante. J'ai justement eu le problème il y a qq jour ou je voulais extraire chaque images d'un .gif, mais je n'arrivait pas à avoir l'image complète à chaque image (il y a que ce qui change qui est codé dans le gif)

Alors je suis interessé par la réponse à la question qu'a posé JavaTfairelaPo : comment récupérer les coordonnées du bout d'image qui a changé ??
javaTfairelaPo
Messages postés
4
Date d'inscription
mardi 27 décembre 2005
Statut
Membre
Dernière intervention
20 mars 2007
-
Mon probleme d'URL est résolu !

J'ai quand même un souci quand à l'affichage de mes images; le fond n'est pas codé avec l'image (traduire : seule la partie qui doit être rafraichie est dans le gif).
Comment récupérer les coordonnées permettant d'afficher, par exemple, l'image 1 par rapport à l'image 0?
Tu as certainement été confronté au problème, comment l'as-tu résolu?
javaTfairelaPo
Messages postés
4
Date d'inscription
mardi 27 décembre 2005
Statut
Membre
Dernière intervention
20 mars 2007
-
Merci de ton aide,
Je me suis rendu compte que mon erreur venait de l'instruction :
in=new BufferedInputStream(new FileInputStream(new File(f)));
Je récupère directement une IOException et donc null !
(Je préfèrerai donner une URI ou URL en argument --> bibi en galère)

Je ne récupère donc pas null en sortie de getReader.
tucobouch
Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
14 -
Si tu fait :
ImageIO.getReaderFormatNames();
qu'est ce qu'il te retourne ?

bon courage
javaTfairelaPo
Messages postés
4
Date d'inscription
mardi 27 décembre 2005
Statut
Membre
Dernière intervention
20 mars 2007
-
La fonction getReader me renvoie null, alors que l'affichage des formats reconnus contient bien le type gif. Aurais-tu une idée du pourquoi du comment?

Merci pour ta source et tes conseils futurs...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.