На GitHub доступно множество библиотек сжатия. Я лично пользовалась
реализация 'id.zelory: компрессор: 2.1.0'.
Использование тоже довольно просто.
File compressedFile= null;
try {
compressedFile = new Compressor(this).compressToFile(file);
compressedFileUri = Uri.fromFile(compressedFile);
UploadImage(compressedFileUri);
imageButton.setImageURI(compressedFileUri);
} catch (IOException e) {
e.printStackTrace();
Log.e("EditProfile","image compression error",e.getCause());
}
file здесь файл, который будет сжат.
Теперь сжатыйFileUri может использоваться как ссылка на сжатый файл и может быть загружен либо как составной файл, либо как base64. (Я использовал FireBase так, это стало более простым) Он преобразовал мой файл с 400 КБ до 80 КБ, сохранив качество.