150 votes

Convertir le bitmap en fichier

Je comprends que l'utilisation de BitmapFactory peut convertir un fichier en bitmap, mais existe-t-il un moyen de convertir une image bitmap en fichier ?

271voto

amsiddh Points 998

J'espère que ça t'aidera :

 //create a file to write bitmap data
File f = new File(context.getCacheDir(), filename);
f.createNewFile();

//Convert bitmap to byte array
Bitmap bitmap = your bitmap;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);
fos.flush();
fos.close();

94voto

P.Melch Points 3278

Essaye ça:

 bitmap.compress(Bitmap.CompressFormat.PNG, quality, outStream);

Regarde ça

49voto

fraggjkee Points 150
File file = new File("path");
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();

14voto

Mohamed Embaby Points 595

La conversion de Bitmap en File doit être effectuée en arrière-plan (PAS DANS LE FIL PRINCIPAL) cela bloque l'interface utilisateur spécialement si le bitmap était volumineux

 File file;

public class fileFromBitmap extends AsyncTask<Void, Integer, String> {

    Context context;
    Bitmap bitmap;
    String path_external = Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg";

    public fileFromBitmap(Bitmap bitmap, Context context) {
        this.bitmap = bitmap;
        this.context= context;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // before executing doInBackground
        // update your UI
        // exp; make progressbar visible
    }

    @Override
    protected String doInBackground(Void... params) {

        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");
        try {
            FileOutputStream fo = new FileOutputStream(file);
            fo.write(bytes.toByteArray());
            fo.flush();
            fo.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }


    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        // back to main thread after finishing doInBackground
        // update your UI or take action after
        // exp; make progressbar gone

         sendFile(file);

    }
}

L'appeler

 new fileFromBitmap(my_bitmap, getApplicationContext()).execute();

vous DEVEZ utiliser le file dans onPostExecute .

Pour changer le répertoire de file à stocker dans le cache remplacer la ligne :

  file = new File(Environment.getExternalStorageDirectory() + File.separator + "temporary_file.jpg");

avec :

 file  = new File(context.getCacheDir(), "temporary_file.jpg");

9voto

Asad Choudhary Points 113

La plupart des réponses sont trop longues ou trop courtes et ne remplissent pas l'objectif. Pour ceux qui recherchent du code Java ou Kotlin pour convertir le bitmap en objet fichier. Voici l'article détaillé que j'ai écrit sur le sujet. Convertir Bitmap en fichier dans Android

 public static File bitmapToFile(Context context,Bitmap bitmap, String fileNameToSave) { // File name like "image.png"
        //create a file to write bitmap data
        File file = null;
        try {
            file = new File(Environment.getExternalStorageDirectory() + File.separator + fileNameToSave);
            file.createNewFile();

//Convert bitmap to byte array
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 0 , bos); // YOU can also save it in JPEG
            byte[] bitmapdata = bos.toByteArray();

//write the bytes in file
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(bitmapdata);
            fos.flush();
            fos.close();
            return file;
        }catch (Exception e){
            e.printStackTrace();
            return file; // it will return null
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X