Reducir el tamaño de un mapa de bits a un tamaño especificado en Android

Quiero reducir el tamaño de un mapa de bits a 200kb exactamente. Obtengo una imagen de la tarjeta SD, la comprimo y la guardo en la tarjeta sd otra vez con un nombre diferente en un directorio diferente. La compresión funciona bien (3 mb como la imagen se comprime a alrededor de 100 kb). Escribí las siguientes líneas de códigos para esto:

String imagefile ="/sdcard/DCIM/100ANDRO/DSC_0530.jpg"; Bitmap bm = ShrinkBitmap(imagefile, 300, 300); //this method compresses the image and saves into a location in sdcard Bitmap ShrinkBitmap(String file, int width, int height){ BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options(); bmpFactoryOptions.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height); int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width); if (heightRatio > 1 || widthRatio > 1) { if (heightRatio > widthRatio) { bmpFactoryOptions.inSampleSize = heightRatio; } else { bmpFactoryOptions.inSampleSize = widthRatio; } } bmpFactoryOptions.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] imageInByte = stream.toByteArray(); //this gives the size of the compressed image in kb long lengthbmp = imageInByte.length / 1024; try { bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream("/sdcard/mediaAppPhotos/compressed_new.jpg")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bitmap; } 

He encontrado una respuesta que funciona perfectamente para mí:

 /** * reduces the size of the image * @param image * @param maxSize * @return */ public Bitmap getResizedBitmap(Bitmap image, int maxSize) { int width = image.getWidth(); int height = image.getHeight(); float bitmapRatio = (float)width / (float) height; if (bitmapRatio > 1) { width = maxSize; height = (int) (width / bitmapRatio); } else { height = maxSize; width = (int) (height * bitmapRatio); } return Bitmap.createScaledBitmap(image, width, height, true); } 

Llamando al método:

 Bitmap converetdImage = getResizedBitmap(photo, 500); 
  • La foto es tu mapa de bits
  • Intención de la cámara
  • Android Gauge Animation Pregunta
  • Android Camera Intent: ¿cómo obtener una foto de tamaño completo?
  • Error android.graphics.Canvas.throwIfRecycled when overlaying bitmaps
  • Android - ¿Cómo obtener o establecer (imprimir) DPI (puntos por pulgada) de archivo JPEG mientras se carga o se guarda mediante programación?
  • SQLite - ¿Es posible insertar un BLOB a través de la instrucción insert?
  • Cómo guardar una imagen png en android
  • Problemas de Android para convertir ViewGroup con niños en mapa de bits
  • Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
  • Cómo almacenar en caché los mapas de bits en la memoria nativa
  • ¿Cómo abrir un archivo JPG como un BITMAP con el JPG almacenado en el SDCARD?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.