¿Cómo puedo comprimir el tamaño y la calidad del archivo al cargar imágenes?
Ya terminé de subir el archivo a firebase, ¿cómo comprimir el archivo?
Porque cuando el tamaño del archivo es grande, se ralentizará la carga en la vista de reciclaje.
Entonces quiero comprimir el archivo.
Uri imageUri = imageListUri.get(index);
if(spinner.getSelectedItem().toString().equals(getApplicationContext().getResources().getString(R.string.choose_sub))) {
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle(getApplicationContext().getResources().getString(R.string.alert_error))
.setMessage(getApplicationContext().getResources().getString(R.string.choose_sub))
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create();
alertDialog.show();
} else if(image_check.equals("ok")) {
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage(getApplicationContext().getResources().getString(R.string.posting));
progressDialog.show();
if (imageUri != null) {
final StorageReference filerefrence = storageReference.child(System.currentTimeMillis()
+ "." + getFileExtension(imageUri));
// scaling the image
int scaleDivider = 1;
try {
Bitmap fullBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
int scaleWidth = fullBitmap.getWidth() / scaleDivider;
int scaleHeight = fullBitmap.getHeight() / scaleDivider;
byte[] downsizedImageBytes =
getDownsizedImageBytes(fullBitmap, scaleWidth, scaleHeight);
uploadTask = filerefrence.putBytes(downsizedImageBytes);
} catch (IOException e) {
e.printStackTrace();
}
static public byte[] getDownsizedImageBytes(Bitmap fullBitmap, int scaleWidth, int scaleHeight) throws IOException {
Bitmap scaledBitmap = Bitmap.createScaledBitmap(fullBitmap, scaleWidth, scaleHeight, true);
// 2. Instantiate the downsized image content as a byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();
scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
return baos.toByteArray();
}
Entonces, ¿es correcto?
try {
Bitmap fullBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
ByteArrayOutputStream out = new ByteArrayOutputStream();
fullBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); // Here 100 is the quality in percent of the image
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
int scaleWidth = fullBitmap.getWidth() / scaleDivider;
int scaleHeight = fullBitmap.getHeight() / scaleDivider;
byte[] downsizedImageBytes =
getDownsizedImageBytes(fullBitmap, scaleWidth, scaleHeight);
uploadTask = filerefrence.putBytes(downsizedImageBytes);
} catch (IOException e) {
e.printStackTrace();
}
Puedes hacerlo usando la BitmapFactory
clase así
Bitmap original = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri)
ByteArrayOutputStream out = new ByteArrayOutputStream();
original.compress(Bitmap.CompressFormat.JPEG, 100, out); // Here 100 is the quality in percent of the image
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
Tenga en cuenta que PNG ya es un formato sin pérdidas, por lo que no hará ninguna diferencia durante la compresión, si realmente desea ver los efectos, use JPEG
Acepta calidad 0 - 100
0 = Compresión MÁXIMA (calidad mínima adecuada para imágenes pequeñas)
100 = Mínima Compresión (Calidad MÁXIMA adecuada para imágenes grandes)
Créditos a esta respuesta
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras