web-dev-qa-db-fra.com

bitmap.compress (Bitmap.CompressFormat.PNG, 0, fOut) rendant la taille de l'image plus grande que celle d'origine

Je veux compresser l'image prise à partir d'une caméra au format png pour les réduire, par la taille, .__, donc j'utilise ce code:

compressedPictureFile = new File(imagePath);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
FileOutputStream fOut = new FileOutputStream(compressedPictureFile);
boolean compressed = bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut);
fOut.flush();
fOut.close();

Le problème est que comprimPictureFile est en réalité plus grand que l'image d'origine (de 1 Mo à 6 Mo)

Qu'est-ce qui me manque? Et est-ce le meilleur moyen de réduire la taille d'une image?

Merci

17
Dany Y

Les images prises avec l'appareil photo sont probablement stockées dans le format jpg -, qui entraîne des pertes, mais qui convient relativement aux images très colorées (telles que les photographies). 

Lorsque vous compressez le bitmap à l'aide de votre méthode, vous l'enregistrez en tant que png . La compression png est sans perte, mais peut atteindre une taille de fichier assez petite quand il y a peu de couleurs (comme dans certains logotypes ou autres graphiques). Lorsque la quantité de couleurs et la complexité d'un fichier png augmentent, la taille du fichier augmente également (c'est pourquoi l'appareil photo enregistre un fichier jpg - le rapport qualité/taille du fichier est bien meilleur que le format png pour la plupart des photographies).

Donc, si vous voulez réduire la taille des fichiers des photographies, utilisez la compression jpg et testez le paramètre quality. Vous pouvez également vouloir diminuer la résolution des images car cela vous fera économiser beaucoup d’espace (un fichier avec une résolution de 50% aura une taille de données d’environ 25%).

24
Jave

ça marche bien sur mon application

    public static String makeScreen(View view) throws Exception {
    String filename = "file.png";
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap b = view.getDrawingCache();
    FileOutputStream file = null;

    try {
        file = new FileOutputStream(Environment.getExternalStorageDirectory().toString() + "folder/" + filename);
        if (file != null) {
            b.compress(Bitmap.CompressFormat.PNG, 98, file);
            file.close();
        }
        view.destroyDrawingCache();
    } catch (Exception e) { view.destroyDrawingCache(); }
}
0