Récupération d'image sur le net [RESOLU]

Récupération d'image sur le net [RESOLU] - Java - Programmation

Marsh Posté le 13-02-2006 à 00:51:28    

Bonjour tout le monde
 
Voilà je fais un petit programme pour un projet...Pour but final: faire des statistiques...
 
Mais là mon probléme est ailleurs:
 
j'aimerais pouvoir copier ce genre d'image :
 
http://re2.mm-c1.yimg.com/image/1148297842
 
Oui c'est pas super, je le sait ;)....Me suis cassé la tête sur plusieurs méthodes...Rien [:atog]  
 
Je pense que ce genre d'image est encodé en un truc propriétaire et que ça va pas être simple, mais si quelqu'un à une solution...
ou une pistouille....
 
ça me permettrais de rendre plus gai tout ces lignes de codes ;)
 
Merci d'avance

Message cité 1 fois
Message édité par xtof_83 le 14-02-2006 à 23:16:36
Reply

Marsh Posté le 13-02-2006 à 00:51:28   

Reply

Marsh Posté le 13-02-2006 à 01:08:17    

[:dwayne gittens]  
 
pas d'idee


Message édité par seboxys le 13-02-2006 à 01:09:00

---------------
Seboxys...
Reply

Marsh Posté le 13-02-2006 à 01:36:11    

xtof_83 a écrit :

Je pense que ce genre d'image est encodé en un truc propriétaire


Ce n'est rien de plus qu'un JPEG classique, j'vois rien de proprio là dedans [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-02-2006 à 09:27:10    

Heu :heink:
Clic droit -> enregistrer l'image sous :??:
Enfin perso ça marche

Reply

Marsh Posté le 13-02-2006 à 09:30:43    

j'imagine qu'il veut le faire en java [:marc]
 
 un wget en java, donc tu vas utiliser URLConnection ou HttpURLConnection, DataInputStream...  
tu pourras recuperer l'image en local, mais je suis même pas sur que ce soit ca que tu veuilles faire :??:


---------------
IVG en france
Reply

Marsh Posté le 13-02-2006 à 16:35:25    

Sebou77 a écrit :

Heu :heink:
Clic droit -> enregistrer l'image sous :??:
Enfin perso ça marche


 
 [:fande--]  [:psychokwak] Tu veux m'apprendre comment faire  [:jean-guitou]  
 
 
 

uriel a écrit :

j'imagine qu'il veut le faire en java [:marc]
 
 un wget en java, donc tu vas utiliser URLConnection ou HttpURLConnection, DataInputStream...  
tu pourras recuperer l'image en local, mais je suis même pas sur que ce soit ca que tu veuilles faire :??:


 
 
Ben oui le but c'est que une fois le lien que je vous ai donné obtenu, je "lis" la page et pompe l'image...j'arive avec des images .jpg etc....
Mais pas avec celle ci.
Ce soir je poste le code que j'ai au cas ou ;)

Reply

Marsh Posté le 13-02-2006 à 16:47:27    

Ben chais pas, PIL a pas l'air d'avoir trop de problèmes [:pingouino]
 

Code :
  1. >>> from PIL import Image
  2. >>> from cStringIO import StringIO
  3. >>> import urllib2
  4. >>> uri = "http://re2.mm-c1.yimg.com/image/1148297842"
  5. >>> im = Image.open(StringIO(urllib2.urlopen(uri).read()))
  6. >>> print im.format, im.size, im.mode
  7. JPEG (125, 100) RGB
  8. >>>


(et utiliser im.save() pour créer une image sur le disque crée bien une copie lisible du machin)

Message cité 1 fois
Message édité par masklinn le 13-02-2006 à 16:48:21

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-02-2006 à 17:06:55    

masklinn a écrit :

Ben chais pas, PIL a pas l'air d'avoir trop de problèmes [:pingouino]
 

Code :
  1. >>> from PIL import Image
  2. >>> from cStringIO import StringIO
  3. >>> import urllib2
  4. >>> uri = "http://re2.mm-c1.yimg.com/image/1148297842"
  5. >>> im = Image.open(StringIO(urllib2.urlopen(uri).read()))
  6. >>> print im.format, im.size, im.mode
  7. JPEG (125, 100) RGB
  8. >>>


(et utiliser im.save() pour créer une image sur le disque crée bien une copie lisible du machin)


 
 
Merci masklinn,
 
je connaisais pas trop  :ange: je teste ça ce soir merci ;)

Reply

Marsh Posté le 13-02-2006 à 17:13:10    

C'est du python hein pas du java :o
 
C'est juste pour dire que la Python Image Library ne semble pas avoir de problème avec l'image, donc que tu fais probablement une connerie quelque part :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-02-2006 à 17:47:08    

ah oki...me disais aussi...
 
Bon ben je teste ce soir...et en cas je donnerais un peu de code si j'arrive vraiment pas...
 

Reply

Marsh Posté le 13-02-2006 à 17:47:08   

Reply

Marsh Posté le 13-02-2006 à 21:19:26    

Voilà ce que j'ai fait actuellement ;)
 
ça me crée un fichier etc...mais pour ces photos, jai un fichier vide
 

Code :
  1. import java.io.*;
  2. import java.net.MalformedURLException;
  3. import java.net.URL;
  4. import java.util.regex.*;
  5. public class RecupImage {
  6. public RecupImage(String nom,int id) {
  7.  try {
  8.   URL adresse=null;
  9.   adresse = new URL(nom);
  10.   //on ouvre la connection vers le fichier voulu
  11.   int tailleFichier=(int)adresse.openConnection().getContentLength();
  12.   //on cree un datainputstream pour les octets du fichier
  13.   DataInputStream dis = new DataInputStream(adresse.openStream());
  14.   BufferedInputStream bis = new BufferedInputStream(dis);
  15.   //expresion reguliere pour recup le nom de fichier
  16.   String regex="http://.*/(\\w.*)";
  17.   String content=null;
  18.   Matcher matcher = Pattern.compile(regex).matcher(nom);
  19.   if(matcher.lookingAt()){
  20.    content = matcher.group(1);
  21.   }
  22.   //expression reguliere pour l'extension et le nom sans l'extension
  23.   String regex1="(\\w*).(\\w*)";
  24.   String extension=null;
  25.   String name=null;
  26.   Matcher matcher1 = Pattern.compile(regex1).matcher(content);
  27.   if(matcher1.lookingAt()){
  28.    name = matcher1.group(1);
  29.    extension = matcher1.group(2);
  30.   }
  31.   System.out.println("trouve: "+content+" extension: "+extension+" nom: "+name);
  32.     
  33.      // Préparation du flux de sortie
  34.      DataOutputStream dos = new DataOutputStream(new FileOutputStream(name+"."+extension));
  35.      BufferedOutputStream bos = new BufferedOutputStream(dos);
  36.      // Copie des octets du flux d'entrée vers le flux de sortie
  37.      for(int i=0;i<tailleFichier;i++) {
  38.                bos.write(bis.read());
  39.      }
  40.      // Fermeture des flux de données
  41.      bos.flush();
  42.      bos.close();
  43.      bis.close();
  44.  }
  45.  catch (MalformedURLException e) {
  46.   // TODO Auto-generated catch block
  47.   e.printStackTrace();
  48.  }
  49.  catch (IOException e) {
  50.   // TODO Auto-generated catch block
  51.   e.printStackTrace();
  52.  }
  53. }
  54. }


Message édité par xtof_83 le 13-02-2006 à 21:19:42
Reply

Marsh Posté le 13-02-2006 à 21:39:07    

A aucun moment t'as songé à utiliser javax.imageio.ImageIO?
 
Accessoirement, ta "regex1" ne peut pas matcher ce fichier puisqu'il n'a pas d'extension.
 
Bon, sinon 2-3 trucs que je ferais différement:
 

  • L'argument "nom" c'est un chemin => path, pas nom
  • Avec ImageIO obtenir la taille du fichier est inutile
  • Récupère la connection au lieu d'un objet URL (URLConnection con = (new URL(path)).openConnection(); ), ça te permet d'avoir facilement accès au content-type et au reste des headers
  • Pour récupérer ton image, BufferedImage im = ImageIO.read(con.getInputStream()); comme ça tu peux utiliser ImageIO.write(image, type, outFile) pour l'écrire sur le disque
  • Ne surtout pas matcher sur l'extension, le getContentType renvoie un type MIME, teste si c'est un type mime image (image/*) et récupère la 2e partie, c'est le type d'image et l'extension du fichier, récupère uniquement le nom du fichier depuis le chemin originel (path)
  • Chuis pas sûr que les erreurs malformedurlexception et IOError qualifient pour stacktracer, autant imprimer un joli message
  • Il se passe quoi si on envoie le chemin "null" à la fonction?


En dehors de ça, -- va sûrement me taper dessus et me dire que j'ai tout faux, mais bon :o


Message édité par masklinn le 13-02-2006 à 21:53:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-02-2006 à 21:52:59    

javax.imageio.ImageIO
 
lol rien qu'au nom j'ai l'impression que ça va me faliciter un peu la vie....

Reply

Marsh Posté le 13-02-2006 à 21:55:11    

Ben en gros les 30 lignes composant le "bulk" de ton machin peuvent se transformer en moins de 10 avec ImageIO (et 2 ou 3 autres trucs) :o


Message édité par masklinn le 13-02-2006 à 21:55:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-02-2006 à 23:16:08    

Voilà le résultat :
 
 

Code :
  1. public class RecupImage {
  2. public RecupImage(String path, String nom) {
  3.  try {
  4.   URL adresse=new URL(path);
  5.   URLConnection con = adresse.openConnection();
  6.   BufferedImage im =ImageIO.read(con.getInputStream());
  7.   String[] extension=ImageIO.getReaderFormatNames();
  8.   FileOutputStream img= new FileOutputStream(nom);
  9.   ImageIO.write(im, extension[1], img);
  10.  } catch (MalformedURLException e) {
  11.   // TODO Auto-generated catch block
  12.   e.printStackTrace();
  13.  } catch (IOException e) {
  14.   // TODO Auto-generated catch block
  15.   e.printStackTrace();
  16.  }
  17. }
  18. }


 
Bien entendu ça marche.
 
En te remerciant Masklinn  :jap:

Reply

Marsh Posté le 14-02-2006 à 23:22:52    

xtof_83 a écrit :

Voilà le résultat :
 
 

Code :
  1. public class RecupImage {
  2. public RecupImage(String path, String nom) {
  3.  try {
  4.   URL adresse=new URL(path);
  5.   URLConnection con = adresse.openConnection();
  6.   BufferedImage im =ImageIO.read(con.getInputStream());
  7.   String[] extension=ImageIO.getReaderFormatNames();
  8.   FileOutputStream img= new FileOutputStream(nom);
  9.   ImageIO.write(im, extension[1], img);
  10.  } catch (MalformedURLException e) {
  11.   // TODO Auto-generated catch block
  12.   e.printStackTrace();
  13.  } catch (IOException e) {
  14.   // TODO Auto-generated catch block
  15.   e.printStackTrace();
  16.  }
  17. }
  18. }


 
Bien entendu ça marche.
 
En te remerciant Masklinn  :jap:


 
oui un grand merci a toi  :jap:  


---------------
Seboxys...
Reply

Marsh Posté le 14-02-2006 à 23:28:47    

C'est pas d'un intérêt formidable, mais tu pourrais retirer une ligne inutile en faisant  

Code :
  1. URLConnection con = (new URL(path)).openConnection()


sans la ligne du dessus :o
 
Ca se lit relativement bien (enfin pas moins bien que les imbrications habituelles de (new WhateverClass(new WhateverObject(new Foo))) quoi) et ça évite de laisser trainer un truc pas bien utile dans le namespace local


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-02-2006 à 23:55:43    

bien ;) ...changement opéré ...ça commence à me plaire java...
 
 
 :)

Reply

Marsh Posté le 15-02-2006 à 00:26:20    

[:psywalk]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed