compressformat compress android compression image-resizing bitmapfactory

android - bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut) haciendo que el tamaño de la imagen sea más grande que el original



bitmap compress android (2)

Quiero comprimir la imagen tomada de una cámara a formato png para hacerlas más pequeñas, así que estoy usando este código:

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();

El problema es que compressPictureFile es en realidad más grande que la imagen original (de 1 Mb a 6Mb)

¿Qué me estoy perdiendo? ¿Y es esta la mejor manera de reducir el tamaño de una imagen?

Gracias


Las imágenes tomadas con la cámara probablemente se almacenan en el formato jpg , que tiene pérdidas, pero es relativamente bueno para imágenes con muchos colores (como fotografías).

Cuando comprime el mapa de bits con su método, lo guarda como un png . La compresión png no tiene pérdidas, pero puede lograr tamaños de archivo bastante pequeños cuando hay pocos colores (como en ciertos logotipos u otros gráficos). Cuando aumenta la cantidad de colores y la complejidad en un archivo png, también lo hará el tamaño del archivo (esta es la razón por la que la cámara guarda un jpg: la relación calidad / tamaño de archivo es mucho mejor que png para la mayoría de las fotografías).

Por lo tanto, si desea reducir el tamaño de archivo de las fotografías, utilice la compresión jpg y experimente con el parámetro de calidad. También es posible que desee disminuir la resolución de las imágenes, ya que esto ahorrará mucho espacio (un archivo con una resolución del 50% tendrá aproximadamente un 25% de tamaño de datos).


funciona bien en mi aplicación

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(); } }