Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LIRE TOUTES LES IMAGES D'UN GIF ANIMÉ


Information sur la source

Catégorie :Java2D Classé sous : gif, anime, imageio, image Niveau : Débutant Date de création : 30/03/2006 Date de mise à jour : 30/03/2006 01:52:14 Vu : 21 884

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


Description

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

  • /**
  • * 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;
  • }
/**
* 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
 

Historique

30 mars 2006 01:52:14 :
manquait la fonction getReader()

Commentaires et avis

signaler à un administrateur
Commentaire de javaTfairelaPo le 19/03/2007 12:16:25

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...

signaler à un administrateur
Commentaire de tucobouch le 19/03/2007 18:47:48

Si tu fait :
ImageIO.getReaderFormatNames();
qu'est ce qu'il te retourne ?

bon courage

signaler à un administrateur
Commentaire de javaTfairelaPo le 20/03/2007 12:35:33

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.

signaler à un administrateur
Commentaire de javaTfairelaPo le 20/03/2007 18:53:02

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?

signaler à un administrateur
Commentaire de pumbaa666 le 19/12/2007 17:02:58 8/10

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é ??

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Lecture d'un gif avec ImageIO.read [ par Bouki ] sltmon pb est sur ce bout de code :try{Image_selectionne = ImageIO.read(new File(Nom_image));}catch (IOException e){e.printStackTrace();}le new file n Help: Affichage d'image bmp avec transparence grace a son masque [ par Sirusisback ] Bonjour je suis nouveau et j'ai probleme:Jai trois image:- backgroung.bmp- image.bmp (image quelconque)- image_mask.bmp (masque de l'image.bmp)Je sui Bouton vec .ico et non avec .gif [ par kikoj ] Salut à tous,Mon probléme c'est que j'ai un JButton qui doit recevoir une certaine image. Le probléme c'est que l'image doit être un .gif et l'image q Saving image avec ImageIO [ par elpadrino93 ] BonjourApr&#232;s plusieurs tentatifs sans succ&#233;es, je m'adresse a vous pour si vous pouvez m'aider, car je ne comprends toujours pas.J'ai une im javax.imageio.ImageIO ??? [ par SLaYerS ] Voila on m'avait dit qu'on pouvait lire toute sorte de fichier image... le BMP est il aussi suporter ?Car quand je fait Image img = ImageIO.read(new F Gif anime [ par Aldee ] Peut-on utiliser des gif animés dans une application Java (pas une applet).Si oui, peut-on commander leur animation par un Listener?Merci d'avance.cia CGI - envoyer une image GIF-JPEG [ par felipelvh ] Je suis en train d'ecrire un CGI (destiné a etre embarqué)Il me faut donc pouvoir envoyer des images compressées.ma réponse au GET de Internet Explore PBS ANIMATIONS THREADS [ par Geomaster ] Voilà mon probleme.--------------------------------------------------------------------this.y -= 10;image = "Perso_Dos_2.gif";panneau.repaint();try { Image en GIF sans enregistrer [ par balbinus ] Je voudrais faire un serveur qui génère une image aléatoire... J'ai donc, pour l'instant, une BufferedImage. Comment je peux faire pour l'envoyer sous Gif Annimé ou succession d'images [ par olaaa ] Salut! J'aimerai savoir si il est possible d'int&#233;grer des image en java sous forme de gif annim&#233; ou bien sous forme de succ&#233;ssion d'ima


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.