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.
- Android - Bitmap.CreateBitmap - excepción de puntero nulo
- Android y cortar (eliminar) la forma de mapa de bits
- Cómo dibujar en Bitmap en android?
- Guardar mapa de bits en la tarjeta SD
- Bitmap vs ImageView vs Drawable
¿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.
- Android: ¿Cómo configurar la imagen de ImageSwitcher mediante un mapa de bits? SetImageBitmap no existe?
- Rendimiento de mapa de bits escala android
- Cómo rellenar el objeto de mapa de bits con color en Android
- Obtener el tamaño de Bitmap Android
- Android sin memoria al asignar variables
- Cómo rellenar gridview con la imagen seleccionada de la galería o capturada desde la cámara
- Es el tamaño decreciente de los archivos .png tiene algún efecto a resultado Bitmap en la memoria
- Android: Bitmap: ¿Cómo guardar el lienzo con fondo verde en android?
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);
- Seleccione el elemento de AutoCompleteTextView en uiautomator
- Android GridLayoutManager con columnas y fila span