Comprende el código correctamente previamente a utilizarlo a tu trabajo si tdeseas aportar algo puedes compartirlo con nosotros.
Solución:
Encontré 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);
Dónde photo
es tu mapa de bits
Aquí está la solución que limita la calidad de la imagen sin cambiar width
y height
. La idea principal de este enfoque es comprimir el mapa de bits dentro del bucle mientras el tamaño de salida es mayor que maxSizeBytesCount
. Créditos a esta pregunta por la respuesta. Este bloque de código muestra solo la lógica de reducir la calidad de la imagen:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
int currSize;
int currQuality = 100;
do
bitmap.compress(Bitmap.CompressFormat.JPEG, currQuality, stream);
currSize = stream.toByteArray().length;
// limit quality by 5 percent every time
currQuality -= 5;
while (currSize >= maxSizeBytes);
Aquí está el método completo:
public class ImageUtils
public byte[] compressBitmap(
String file,
int width,
int height,
int maxSizeBytes
) widthRatio > 1)
if (heightRatio > widthRatio)
bmpFactoryOptions.inSampleSize = heightRatio;
else
bmpFactoryOptions.inSampleSize = widthRatio;
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
int currSize;
int currQuality = 100;
do
bitmap.compress(Bitmap.CompressFormat.JPEG, currQuality, stream);
currSize = stream.toByteArray().length;
// limit quality by 5 percent every time
currQuality -= 5;
while (currSize >= maxSizeBytes);
return stream.toByteArray();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)