0

I have one image file of size 2mb named file.jpg and i want to decrease its size before sending it to server but i don't want the image to get distorted. There are similar threads but most of them are converting the file into zip format which i don't want to do.

So please help me out.

Cosmic Dev
  • 522
  • 6
  • 20

2 Answers2

1

Use https://github.com/zetbaitsu/Compressor library:

it will give almost lossless compression result.

val compressedImageFile = Compressor.compress(context, actualImageFile) {
    default()
    destination(myFile)
}

after compression you can delete your actual image and use new destination image file path.

Vishal Thakkar
  • 652
  • 4
  • 18
0

read your JPG as bitmap and use

bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out);`

quality in range 95-100 won't harm your quality (you already use JPG in fact), but will significantly reduce size

some docs in HERE

edit: this question is a duplicate...

snachmsm
  • 17,866
  • 3
  • 32
  • 74
  • i can't use bitmap – Cosmic Dev Aug 07 '20 at 07:23
  • Ha ha @Cosmic Dev that Compressor library is using Bitmap too. – blackapps Aug 07 '20 at 09:08
  • ok but it is taking care of a lot of code: converting file to bitmap then compression then again writing back it to file. – Cosmic Dev Aug 07 '20 at 09:16
  • well, `File`->`Bitmap` is single line (`bitmap = BitmapFactory.decodeFile(file.getPath())`), compression is also a single line (like in answer)... whole code/method responsible for this feature may take maybe a dozen of lines and you don't need to save it as file, just stream result. `out` is already a stream, so you can send data on the fly, it will be faster and also reduce your APK size (ommiting additional library implemented just for this one purpose) – snachmsm Aug 07 '20 at 09:32
  • it is more convenient to implement third-party lib and more versatile, but this also takes few lines and you just strain your app with additional third-party code increasing your APK size. Your needs may be fulfilled with framework methods, which are supported from the beggining of Android, so I think implementing whole lib for just one small operation is unnecessary. But thats your choice, maybe features of this lib may be useful for you in other places in app or lib size isn't significant – snachmsm Aug 07 '20 at 09:35