IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

problème récupération image à partir d'une URL


Sujet :

Développement Web en Java

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut problème récupération image à partir d'une URL
    bonjour tous le monde,

    voilà, j'essaye de récupérer les images d'un site pour pouvoir effectuer des traitement dessus (redimensionnement, transcodage, passage en niveaux de gris...) et les renvoyer au client (j'utilise des servlets/JSP).
    j'utilise jdk 6.
    j'ai écris le bout de code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Document doc = parser.getDocument();
    	   File file=new File(chemin);
    	  if(!file.exists()){file.mkdir();}
     
    	   NodeList listenoeuds=doc.getElementsByTagName("img");
    	   for(int i=0;i<listenoeuds.getLength();i++)
    		{
    	 		org.w3c.dom.Element courant=(org.w3c.dom.Element)listenoeuds.item(i);
    	 		String attr = courant.getAttribute("src");
    	 		URL u=new URL(URLcontext,attr);
    			URLConnection uc = u.openConnection();
    	        BufferedImage im =ImageIO.read(uc.getInputStream());
     
    			String FileName =new String();
    			FileName = attr.substring(attr.lastIndexOf('/') + 1);
    			String extension=attr.substring(attr.lastIndexOf('.') + 1);
    			FileOutputStream sortie= new FileOutputStream(chemin+FileName);
    			ImageIO.write(im, extension, sortie);
     
    		}//fin for
    le code marche mais rien ne se passe. aucune image enregistrer dans mon répertoire.
    quelqu'un saurais t-il ou ça coince?
    merci infiniment.

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Bah essaies de déboguer la chose, d'ajouter quelques syso pour savoir où est ce que ça bloque : dans la récupération du html ? dans le chargement des images, dans leur ecriture, etc.

    Sinon, comme ça, je dirais que les src dans images sont relatifs, donc, URL u=new URL(URLcontext,attr) va pas marcher. Il faut que tu ajoutes le domaine aux src avant de t'y connecter.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    merci pour ta réponse.
    pour ce qui est de la création de l'url, elle est faite sur la base du chemin absolu (urlcontext) auquel j'ai rajouté le chemin relatif http://java.sun.com/docs/books/tutor...atingUrls.html
    la récupération de l'html est effectué.
    je me penche du coté du chargement des images et de leur écritures.

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    le problème c'est au niveau des balises images (img) qu'ils ne trouvent pas.
    j'ai essayé ça, mais ça ne marche pas non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    NodeList listenoeuds=doc.getChildNodes();
    if(listenoeuds!=null)
    { 	int len=listenoeuds.getLength();
     
    for(int i=0;i<len;i++)
    {
    	Node courant=(Node)listenoeuds.item(i);
    	if(courant.getNodeType()==Node.ELEMENT_NODE)
    	{
     		if("img".equalsIgnoreCase(courant.getNodeName()))
     		{
     
    	 		NamedNodeMap attrs=courant.getAttributes();
    	 		for(int j=0;j<attrs.getLength();i++)
    	 		{
    	 			if("src".equalsIgnoreCase(attrs.item(j).getNodeName()))
    	 			{
    	 				attr = attrs.item(j).getNodeValue();
    	 				break;
    	 			}
    	 		}
     
    	 		URL u=new URL(URLcontext,attr);
    	 		URLConnection uc = u.openConnection();
    	        BufferedImage im =ImageIO.read(uc.getInputStream());
    	        String FileName =new String();
    			FileName = attr.substring(attr.lastIndexOf('/') + 1);
    			String extension=attr.substring(attr.lastIndexOf('.') + 1);
    			FileOutputStream sortie= new FileOutputStream(chemin+FileName);
    			ImageIO.write(im, extension, sortie);
    		}
    		else
     
    	}//fin if if(courant.getNodeType()==Node.ELEMENT_NODE)
     
    }//fin for	   
    }//fin if(listenoeuds!=null)
    alors les amis, une petite idée pourquoi il ne récupére pas les balises img?
    merci pour vos réponses

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    si ça coince au niveau des balises, je me suis dis c'est à coup sur le parser qui flanche (j'utilise cybernekoHTML) et après plusieurs recherches j'ai trouvé que
    This version has the following limitations:

    * There are HTML documents for which NekoHTML cannot properly generate a well-formed XML document event stream. For example, documents with multiple tags are inherently ill-formed because XML documents may only have a single root element.
    * Code added to the core DOM implementation in Xerces-J 2.0.1 introduced a bug in the HTML DOM implementation based on it. The bug causes the element nodes in the resultant HTML document object to be of type org.apache.xerces.dom.ElementNSImpl instead of the appropriate HTML DOM element objects. The problem affects NekoHTML users who use the parser with Xerces-J 2.0.1 and anyone using the HTML DOM implementation in Xerces-J 2.0.1.
    * There are no other known major limitations with this release. However, additional work can always be done to improve performance, fix bugs, and add functionality.
    donc en changeant de parser j'ai résolu mon problème
    voilà le code en utilisant HTMLparser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Parser p = new Parser(url_pgclient);
            NodeFilter filtre=new NodeClassFilter(ImageTag.class);
            NodeList images = p.extractAllNodesThatMatch(filtre);
            for (NodeIterator e = images.elements(); e.hasMoreNodes(); )
            {
                ImageTag imageTag = (ImageTag)e.nextNode();
                if(monrep.mkdir())
    		    {
     
    			try {
    			   URL adresse=new URL(url,imageTag.getImageURL ());
    			   URLConnection con = adresse.openConnection();
    			  	BufferedImage im =ImageIO.read(con.getInputStream());
    			   String extension=imageTag.getImageURL().substring(imageTag.getImageURL().lastIndexOf('.')+1);
    			   String nom_image=imageTag.getImageURL().substring(imageTag.getImageURL().lastIndexOf('/')+1);
     
    			   FileOutputStream sortie= new FileOutputStream(chemin+nom_image);
    			   ImageIO.write(im, extension, sortie);
    			   }
    			   catch (MalformedURLException mue) 
    			   { mue.printStackTrace();}
    			   catch (IOException ioe) 
    			   {ioe.printStackTrace(); }
    		    }
    	 	}
     
    	}//fin try
     
        catch (ParserException pe)
        {
            pe.printStackTrace ();
        }
    bonne continuation à developpez.com

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 84
    Points
    84
    Par défaut
    Merci fasfousba !!!!

    Je cherchais comment faire exactement la même chose que toi !
    Et finalement j'ai vu ton poste
    Me manquais que l'étape pour enregistrer correctement l'image, car en jouant simplement avec les flux, le fichier créé n'était pas correct
    J'avais déjà trouvé l'API javax.imageio et tu m'as montré comment l'utiliser simplement

    béni(e) sois tu

    Merci à toi d'avoir cité ton code qui marche (et marche nickel !!)
    Car souvent les gens disent qu'ils ont trouvé mais ne disent pas comment ils font exactement !

    PS : j'utilise cyberneko pour mon parserHTML, et je n'ai pas de pblm a priori. Je pense donc que tu devais utiliser un mauvais jar de xerces comme précisé dans le bout de doc que tu sites plus haut.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    heureuse d'avoir pu aider quelqu'un

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Recréer une image à partir d'une URL (avec Yahoo Pipes)
    Par VMGodoy dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2014, 18h40
  2. récupérer image à partir d'une url
    Par lefgolas dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2014, 09h15
  3. Poids d'une image a partir d'une url
    Par matique dans le forum Langage
    Réponses: 4
    Dernier message: 11/02/2006, 20h41
  4. Créer une image à partir d'une URL ?
    Par DrySs dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2006, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo