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

Java Discussion :

Convertir une image en base64


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut Convertir une image en base64
    Bonjour à tous,

    Je developpe le client d'un webservice.
    Un des paramètres que je dois envoyer dans une fonction est une string contenant la base64 d'une image.

    Je ne trouve pas de solution fonctionelle, quelqu'un a la réponse ?

    Merci d'avance

  2. #2
    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 : 45
    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
    dans commosn codec, tu trouvera la classe org.apache.commons.codec.binary.Base64
    pour faire de l'encodage en base64

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Merci pour ta (rapide) réponse,

    J'ai utilisé la classe que tu as marqué de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    File image = new File("url/image.jpg");
    String imgString = new String(Base64.encodeBase64(image.toString().getBytes()));
    La paramètre que je doit passer est un String. Par contre de cette façon je lève une exception:

    AxisFault
    faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
    faultSubcode:
    faultString: Cannot use object of type stdClass as array
    Y a t'il une meilleure méthode ?

  4. #4
    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 : 45
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String imgString = new String(Base64.encodeBase64(image.toString().getBytes()))
    Je suis pas sur que ca fasse ce que tu veux. Ca va encoder en base64 la réprésentaiton binaire dans l'encodage par défaut de la jvm de la chaine "java.io.File@56239"

    Si tu veux envoyer le contenur de l'image, il faut la lire avec un FileInputStream dans un tableau de byte[] avant de la convertir en base64!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    J'ai suivis ton conseil et j'ai trouvé un bout de code qui le fait pour moi:

    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
     
    public static byte[] getBytesFromFile(File file) throws IOException {
            InputStream is = new FileInputStream(file);
     
            // Get the size of the file
            long length = file.length();
     
            // You cannot create an array using a long type.
            // It needs to be an int type.
            // Before converting to an int type, check
            // to ensure that file is not larger than Integer.MAX_VALUE.
            if (length > Integer.MAX_VALUE) {
                // File is too large
            }
     
            // Create the byte array to hold the data
            byte[] bytes = new byte[(int)length];
     
            // Read in the bytes
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
                offset += numRead;
            }
     
            // Ensure all the bytes have been read in
            if (offset < bytes.length) {
                throw new IOException("Could not completely read file "+file.getName());
            }
     
            // Close the input stream and return bytes
            is.close();
            return bytes;
        }
    Le problème étant que mon paramètre doit être passé en String et que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.commons.codec.binary.Base64.encodeBase64(byte[] binaryData)
    me renvois un Object.

    Y'a t'il une méthode annexe qui renvois une String ?

    [Edit]Alors au temps pour moi, la méthode renvois un byte[] et non pas un Object, dans ce cas, la réponse s'impose d'elle même, désolé pour le post et merci pour ta réponse[/Edit]

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention à ta méthode getBytesFromFile() qui ne ferme pas correctement le flux dans tous les cas :
    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
    	public static byte[] getBytesFromFile(File file) throws IOException {
     
    		// Get the size of the file
    		long length = file.length();
    		if (length > Integer.MAX_VALUE) {
    			// File is too large
    			throw new IOException("File is too large");
    		}
    		// Create the byte array to hold the data
    		byte[] bytes = new byte[(int) length];
     
    		InputStream is = new FileInputStream(file);
    		try {
    			// Read in the bytes
    			int offset = 0;
    			int numRead = 0;
    			while (offset < bytes.length
    					&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
    				offset += numRead;
    			}
     
    			// Ensure all the bytes have been read in
    			if (offset < bytes.length) {
    				throw new IOException("Could not completely read file "
    						+ file.getName());
    			}
    		} finally {
    			// Close the input stream and return bytes
    			is.close();
    		}
    		return bytes;
    	}


    Sinon encodeBase64() ne renvoi pas un objet quelconque mais un byte[] qu'il te suffira de convertir en chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(bytes, "ASCII");
    a++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Merci pour ces précisions,

    J'obtiens désormais quelquechose de cohérent dans ma String, mais j'ai toujours une erreur renvoyé par le serveur de WS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AxisFault
     faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server
     faultSubcode: 
     faultString: Cannot use object of type stdClass as array
     faultActor: 
     faultNode: 
     faultDetail: 
    	{http://xml.apache.org/axis/}stackTrace:Cannot use object of type stdClass as array
    Je me demande du coup si le codage "ASCII" est le bon ?
    L'erreur peut elle venir d'ailleur ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut
    Bonjour,
    Je pense que tu peux trouver qq chose dans ce lien :
    http://home.tele2.fr/bobremy/code_so...html#rubrique2

Discussions similaires

  1. Convertir une image BMP 8 bits en BMP 24 bits
    Par SauCisS dans le forum Bibliothèques
    Réponses: 17
    Dernier message: 23/03/2005, 09h51
  2. Convertir une image PNM en autre chose ...
    Par mattmarttigan dans le forum C
    Réponses: 9
    Dernier message: 09/02/2005, 20h34
  3. Comment convertir une image 24 bits en 8 bits ?
    Par James64 dans le forum Langage
    Réponses: 22
    Dernier message: 13/12/2004, 20h12
  4. [C#] Convertir une Image en Icon
    Par Piolet dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/08/2004, 13h41
  5. [C#] Comment convertir une image bmp en jpg !!!
    Par vandeyy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2004, 20h37

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