Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Compresser un bitmap

Compresser un fichier jpg

Sujet résolu
    9 mai 2012 à 11:28:13

    Bonjour,
    pour une application Android, je dois envoyer des données sur un serveur en passant par un script php. Et je dois envoyer une photo, alors j'arrive à prendre une photo et l'envoyé mais avec une photo de 8M Pixel c'est trop long pour l'envoie surtout en 3G.
    Alors je souhaite compresser le fichier avant l'envoie, j'ai trouvé un système mais j'ai une erreur.

    Voici ma fonction :
    public File compressImg(){
    	File imageFile = new File(pathToOurFile,filename);
    	try{
    		OutputStream out = null;
    		out = new FileOutputStream(imageFile);				
    		BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    		bmOptions.inJustDecodeBounds = true;
    		Bitmap bitmap = BitmapFactory.decodeFile(pathToOurFile, bmOptions);
    		bitmap.compress(Bitmap.CompressFormat.JPEG,80,out);
    		out.flush();
    		out.close();
    	}catch(Exception e){
    		Log.e("Dak","Erreur compress : "+e.toString());
    	}
    	return imageFile;
    }
    


    Le fichier existe bien, c'est bien un jpg ...
    Voici l'exception retourné : java.lang.NullPointerException

    Please, help me ... ou si vous avez une autre solution pour envoyer des photos rapidement sur un serveur.
    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2012 à 11:41:52

      Bonjour,

      J'ai édité ton titre afin qu'il soit conforme aux règles du forum, merci de faire attention à l'avenir.

      Pour ton problème, pouvons-nous avoir l'erreur complète ? Elle indique que l'une de tes variables est à null mais nous ne pouvons pas savoir lequel parce que théoriquement, ton code présenté ne devrait pas lancer d'erreur.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        9 mai 2012 à 11:47:55

        Je n'ai pas de véritables erreurs, étant donné le try/catch. Dans mon LogCat j'ai :
        05-09 11:07:06.302: D/skia(6277): ---- read threw an exception
        05-09 11:07:06.302: D/skia(6277): --- SkImageDecoder::Factory returned null
        05-09 11:07:06.302: E/Dak(6277): Erreur compress : java.lang.NullPointerException

        Et une petite question, il est bien possible de compresser un fichier jpg pour le réduire en poids ?
        Et en faisant ce code, le fichier devrait ce compresser ?
        (Pour être sur que je ne fais pas de bétises :( )

        Sorry pour le titre :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2012 à 12:01:50

          Ok, cela nous indique donc que ton objet Bitmap est null. D'où vient ta variable pathToOurFile ? Es-tu certain que tu ne voulais pas indiquer imageFile ?

          Pour ta pratique, je n'ai jamais eu l'occasion de programmer l'envoi d'un objet Bitmap sur un serveur mais j'aurais sans doute fait quelque chose de similaire.
          • Partager sur Facebook
          • Partager sur Twitter
          Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
            9 mai 2012 à 13:23:53

            Dans :
            • - pathToOurFile : "DCM"
            • - filename : "PHOTO_556456.jpg"


            Je viens de modifier avec ce que tu m'as dis
            J'ai toujours l'exception et l'erreur provient de cette ligne :
            Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), bmOptions);
            

            Si tu as une idée.
            et je reçois sur mon serveur non plus un .jpg mais un fichier avec pour nom : 1354425card ... :o Tu sais à quoi ça peut correspondre? Parce que normalement je dois envoyer un FILE et non pas un bitmap.
            public File compressImg(){
            	File imageFile = new File(pathToOurFile,filename);
            	try{
            		OutputStream out = null;
            		out = new FileOutputStream(imageFile);				
            		BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            		bmOptions.inJustDecodeBounds = true;
            		Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), bmOptions);
            		bitmap.compress(Bitmap.CompressFormat.JPEG,80,out);
            		out.flush();
            		out.close();
            	}catch(Exception e){
            		Log.e("Dak","Erreur compress : "+e.toString());
            	}
            	return imageFile;
            }
            


            !!! Je viens de résoudre mon problème, voici ma solution :
            /* Set bitmap options to scale the image decode target */
            bmOptions.inJustDecodeBounds = false;
            bmOptions.inSampleSize = scaleFactor;
            bmOptions.inPurgeable = true;
            
            /* Decode the JPEG file into a Bitmap */
            Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
            		
            /* Test compress */
            File imageFile = new File(picturePath);
            try{
            	OutputStream out = null;
            	out = new FileOutputStream(imageFile);
            	//Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
            
            	bitmap.compress(Bitmap.CompressFormat.JPEG,80,out);
            	out.flush();
            	out.close();
            }catch(Exception e){
            	Log.e("Dak","Erreur compress : "+e.toString());
            }
            
            • Partager sur Facebook
            • Partager sur Twitter

            [Android] Compresser un bitmap

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown