Jak zmniejszyć rozmiar pliku obrazu przed przesłaniem go na serwer

Wiele aplikacji umożliwia udostępnianie obrazu, który jest wybierany z galerii.

Czy przesyłają oryginalny plik obrazu? Który jest jak 1-3 MB? Czy też przetwarzają?

W każdym razie, w jaki sposób mogę pobrać obraz ze ścieżki pliku, zmniejszyć jego rozmiar, obniżając rozdzielczość i zapisać go gdzie indziej i spróbować przesłać?

Próbowałem:

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);
}

Ale czy to jest właściwy sposób? Ponieważ widziałem odpowiedzi sugerującecompression operation takes rather big amount of time tutaj

questionAnswers(5)

yourAnswerToTheQuestion