Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2336 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1303983
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 00:51:28  profilanswer
 

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
mood
Publicité
Posté le 13-02-2006 à 00:51:28  profilanswer
 

n°1303985
seboxys
TDI powaaaa!!
Posté le 13-02-2006 à 01:08:17  profilanswer
 

[:dwayne gittens]  
 
pas d'idee


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

---------------
Seboxys...
n°1303990
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2006 à 01:36:11  profilanswer
 

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
n°1304011
Sebou77
French Tech powaa :-)
Posté le 13-02-2006 à 09:27:10  profilanswer
 

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

n°1304014
uriel
blood pt.2
Posté le 13-02-2006 à 09:30:43  profilanswer
 

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
n°1304526
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 16:35:25  profilanswer
 

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 ;)

n°1304540
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2006 à 16:47:27  profilanswer
 

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
n°1304565
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 17:06:55  profilanswer
 

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 ;)

n°1304569
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2006 à 17:13:10  profilanswer
 

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
n°1304616
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 17:47:08  profilanswer
 

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

mood
Publicité
Posté le 13-02-2006 à 17:47:08  profilanswer
 

n°1304754
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 21:19:26  profilanswer
 

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
n°1304765
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2006 à 21:39:07  profilanswer
 

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
n°1304770
xtof_83
Freeride Spirit
Posté le 13-02-2006 à 21:52:59  profilanswer
 

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

n°1304772
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2006 à 21:55:11  profilanswer
 

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
n°1305686
xtof_83
Freeride Spirit
Posté le 14-02-2006 à 23:16:08  profilanswer
 

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:

n°1305691
seboxys
TDI powaaaa!!
Posté le 14-02-2006 à 23:22:52  profilanswer
 

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...
n°1305693
masklinn
í dag viðrar vel til loftárása
Posté le 14-02-2006 à 23:28:47  profilanswer
 

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
n°1305698
xtof_83
Freeride Spirit
Posté le 14-02-2006 à 23:55:43  profilanswer
 

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

n°1305709
masklinn
í dag viðrar vel til loftárása
Posté le 15-02-2006 à 00:26:20  profilanswer
 

[:psywalk]


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[résolu] Image gif avec fond transparent en premier planImage a la place d'un bouton
[PHP Centrer du texte dans une image GD[QST] Sur un script [RESOLU]
[Résolu] Donner le "focus" à une div, possible ?getSelection sur textbox enJavascript sur Firefox ? [RESOLU]
probleme avec mediawiki [resolu][Resolu] Probleme avec une CSS de Background sous Firefox
[resolu] getword 
Plus de sujets relatifs à : Récupération d'image sur le net [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR