Cómo reducir el tamaño de un archivo de imagen antes de cargarlo en un servidor

Muchas aplicaciones permiten compartir una imagen, que se toma de la galería.

¿Suben el archivo de imagen original? ¿Cuál es como 1-3 mb? ¿O se procesan?

En cualquier caso, ¿cómo puedo tomar la imagen de una ruta de archivo, reducir su tamaño reduciendo la resolución y guardarla en otro lugar y tratar de cargarla?

Lo intenté:

Bitmap photo = decodeSampledBitmapFromFile(filePath, DESIRED_WIDTH,
                    DESIRED_HEIGHT);

FileOutputStream out = new FileOutputStream(filePath);
photo.compress(Bitmap.CompressFormat.JPEG, 100, out);

public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth,
        int reqHeight) {

    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);

    final int height = options.outHeight;
    final int width = options.outWidth;
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    int inSampleSize = 1;

    if (height > reqHeight) {
        inSampleSize = Math.round((float) height / (float) reqHeight);
    }
    int expectedWidth = width / inSampleSize;

    if (expectedWidth > reqWidth) {
        inSampleSize = Math.round((float) width / (float) reqWidth);
    }
    options.inSampleSize = inSampleSize;
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(path, options);
}

¿Pero es esta la manera correcta de hacerlo? Porque he visto respuestas que sugierencompression operation takes rather big amount of time aquí

Respuestas a la pregunta(5)

Su respuesta a la pregunta