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

API standards et tierces Java Discussion :

java/opencv : Création d'une image png à partir de sa chaîne ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 94
    Par défaut java/opencv : Création d'une image png à partir de sa chaîne ?
    Salut,
    J'essaye de développer un programme qui récupère la chaîne d'une image png (crée elle même avec un script php, donc, physiquement, l'image n'existe pas, on a uniquement la chaîne).

    Voilà une partie de la chaîne :
    Nom : aaaaaaa1.jpg
Affichages : 523
Taille : 94,2 Ko


    Je suis bloqué au niveau de la création d'une image d'extension "png" à partir de cette chaîne.
    Y-a-t-il une fonction de OpenCV que je puisse utiliser en Java, qui me permet de créer une image à partir de sa chaîne ?
    Comme la fonction "imagecreatefromstring" de php.

    Merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    La chaîne dont tu parles ce sont les données de l'image encodées en base 64. En attendant la disponibilité imminente de la classe java.util.Base64 de Java 8, tu peux utiliser la classe org.apache.commons.codec.binary.Base64
    de la bibliothèque Apache commons codec (il y'a bien une classe dans les packages sun du jdk, mais il ne vaut mieux pas l'utiliser directement, comme toutes les classes de ces packages).

    Ces classes te permettront d'obtenir un tableau d'octets que tu pourras convertir en BufferedImage, via un ByteArrayInputStream.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Heu non Joel, le screenshot montre le contenu binaire du png vu comme une chaine. Je ne sais pas où tu a vu du base64 . Ca commence par PNG puis c'est suivi de plein de caractères invalides.

    Ce n'est absolument pas utilisable tel quel car déjà corrompu. Tu n'aura donc aucun moyen de convertir ça en image.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ah, oui @Tchize_, j'avais pas vu qu'il y avait un lien (on distingue si mal le style du lien et du texte). Je me suis basé sur la mention du "imagecreatefromstring" php.

    Désolé, @blackbird, ma réponse est inadéquate.

    Il faudrait voir comment le screenshot a été obtenu : c'est peut être à la base un flux png valide qui a simplement mal été récupéré pour obtenir le screenshot.


    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 94
    Par défaut
    L'image est obtenu via un script php sur Internet (il faut être logguer pour voir l'image) :
    http://www.newbiecontest.org/epreuves/prog/prog11.php

    A chaque exécution, le script génère une image différente.

    Screenshot :
    Nom : scriptGenImg.jpg
Affichages : 494
Taille : 21,0 Ko

    Le code java qui se connecte à L'url du script et affiche le contenu binaire de l'image vu en chaîne :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    import java.net.InetAddress;
    import java.net.UnknownHostException;
     
     
    import java.io.BufferedReader;
    import java.net.URL;
    import java.net.URLConnection;
     
    import java.io.InputStreamReader;
    import java.io.IOException;
     
     
     
    import org.opencv.core.Core;
    import org.opencv.core.CvType;
    import org.opencv.core.Mat;
     
    import org.opencv.highgui.Highgui;
     
     
    public class test
    {
    	private static InetAddress adresseIp;
     
    	public static void main( String[] args ) throws IOException
    	{
    		lookUp("www.newbiecontest.org");
     
    		String totalImgString = getTextFile("http://www.newbiecontest.org/epreuves/prog/prog11.php");
    		System.out.println(totalImgString);
     
     
    		//decrypt(cryptedImage);
     
    	}
     
     
    	public static void lookUp(String serverName) 
    	{
    		try 
    		{
    			adresseIp = InetAddress.getByName(serverName);
    			System.out.println(serverName+" ["+adresseIp.toString()+"]");
    		} catch (UnknownHostException e) 
    		  {
    				System.out.println(e+"\n");
    		  }
    	}
     
    	 public static String getTextFile(String _url) {
    		 BufferedReader reader = null;
    		 try {
    			 URL url = new URL(_url);
    			 URLConnection urlConnection = url.openConnection();
    			 urlConnection.setRequestProperty("Cookie","mescookies");
     
    			 reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
    			 StringBuilder sb = new StringBuilder();
    			 String line = null;
    			 while ((line = reader.readLine()) != null) {
    				 sb.append(line);
    				 sb.append("\n");
    			 }
    			 return sb.toString();
    	        } catch (IOException ex) {
    	        	System.out.println(ex+"\n");
    	        	return "";
    	        } finally {
    	            try {
    	                if (reader != null) {
    	                    reader.close();
    	                }
    	            } catch (IOException ex) {
    	            	System.out.println(ex+"\n");
    	            }
    	        }
    	    }
     
    	public static void decrypt(Mat cryptedImg)
    	{
    		System.out.println( "====Original image====");
    		System.out.println( "Width = "+cryptedImg.cols()+" px.");
    		System.out.println( "Height = "+cryptedImg.rows()+" px.");
    	}
    }
    Questions :
    1- Comment rendre le contenu du 'totalImgString' en une image réelle ?
    ou bien
    2- Est-ce-qu'il y a un moyen d'avoir l'image sous forme d'un tableau de bits utilisable avec imwrite de OpenCV ?

    Merci

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Bon déjà, ton serveur renvoie une image, donc un flux binaire et toi tu lit ca avec.... un Reader. C'est pas prêt de marcher correctement. Tu dois lire directement l'inputStream, dans des tableau de byte[]

    Si ce qui t'intéresse c'est de décoder le PNG pour avoir les pixels, passe directement par ImagesIO.read(inputStream)

Discussions similaires

  1. [Python 3.X] Créer une image png à partir d'une image de format quelconque avec Python
    Par bguy4 dans le forum Général Python
    Réponses: 3
    Dernier message: 30/10/2014, 10h49
  2. Problème de création d'une image BMP à partir d'un byte[]
    Par Dark_Alex69 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 28/03/2010, 16h32
  3. créer une image png à partir d'une fichier XML
    Par med_alpa dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 08/03/2010, 20h53
  4. Création d'une image PNG en C++
    Par magicpm7 dans le forum C++
    Réponses: 5
    Dernier message: 20/04/2007, 08h58
  5. Réponses: 1
    Dernier message: 03/01/2006, 17h46

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