Cómo optimizar la imagen como Facebook y WhatApp?

Quiero optimizar el tamaño del archivo de imagen como whatsapp y facebook están haciendo. He enviado la imagen de 5MB en whatsapp, y la imagen recibida tiene el tamaño de 80KB. La imagen recibida es idéntica a la original, pero la resolución es menor que la original.

He probado casi todos los códigos fuente de la compresión de imágenes Android disponible en stackoverflow, pero eso no funciona para mí. Y luego me encontré con este enlace para optimizar la imagen, que está haciendo un buen trabajo, pero aún no obtener el resultado como whatsapp.

¿Cómo puedo lograr la máxima compresión de imagen sin degradar la calidad de la imagen, igual que whatsapp?

Responder con un código fuente será muy útil.

Gracias por adelantado.

Necesita decodificar la imagen (mapa de bits)

Aquí está el código.

 public Bitmap decodeFile(String path) { // Decode image size int orientation; try { if (path == null) { return null ; } BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; // Find the correct scale value. It should be the power of 2. final int REQUIRED_SIZE = 70; int width_tmp = o.outWidth, height_tmp = o.outHeight; int scale = 0; while (true) { if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) break; width_tmp /= 2; height_tmp /= 2; scale++; } BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; Bitmap bm = BitmapFactory.decodeFile(path, o2); Bitmap bitmap = bm; ExifInterface exif = new ExifInterface(path); orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); Log.e("orientation", "" + orientation); bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),bm.getHeight(), null, true); ImageViewChooseImage.setImageBitmap(bitmap); bitmapfinal = bitmap; return bitmap ; } catch (Exception e) { e.printStackTrace(); return null; } } 

Convierta la imagen en Bitmap y utilice el método compress () para comprimirla con una cierta calidad. Para mantener la calidad de la imagen, reduzca usando la relación de aspecto de su altura y width.you puede utilizar debajo del código: donde los datos son el arsenal del byte de la imagen

 Bitmap screen = BitmapFactory.decodeByteArray(data, 0, data.length); float oHeight = screen.getHeight(); float oWidth = screen.getWidth(); float aspectRatio = oWidth / oHeight; int newHeight = 0; int newWidth = 0; newHeight = 450; newWidth = (int) (newHeight * aspectRatio); screen = Bitmap.createScaledBitmap(screen, newWidth, newHeight, true); ByteArrayOutputStream bos = new ByteArrayOutputStream(); screen.compress(Bitmap.CompressFormat.JPEG, 50, bos); 
  • ¿Es posible utilizar el método BitmapFactory.decodeFile para decodificar una imagen desde la ubicación http?
  • Crear imagen desde la vista / pantalla en Android
  • Mover mapa de bits en lienzo
  • Android: mapa de bits de una vista de gran tamaño
  • Copiar una matriz de bits de la imagen de mapa de bits en la programación ANDROID
  • Pasar Bitmap a otra actividad termina en RunTimeException
  • Convertir todos los colores distintos de un color en particular en un mapa de bits a blanco
  • Cómo dibujar Bitmap rápido en el método onDraw () en el lienzo android
  • Convertir Bitmap en la memoria a Bitmap con Bitmap.Config.RGB_565
  • BitmapFactory.Options da 0 ancho y altura
  • Cómo rotar ruta de la misma manera que un mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.