Earlier this year did a similar thing in my the I was working on, but my solution was to also down-scale it to a limited max 1600px (longer edge), as the project allowed to use smaller resolution images for the given purpose. As many new phones make too high resolution images for many purposes, down-scaling worked much better for me.
As different images have different clarity, How can we determine quality and total compressed bytes beforehand to avoid blurred images? Or know if the image can still be compressed more?
Hey Philipp, Could you please make a video how to navigate back from a page to previous page, by swiping left to right, current page shifts left to right revealing previous page below? Please
The app compressed 20MB images for me without any issues. Since the loop uses a new stream with each iteration, the previous one can be freed up. Therefore, there are allocations for the input byte array, the bitmap and the currently compressed byte array which even for a 20MB image is 50-60MB in memory allocations and is not a lot given what modern devices have as RAM.
@@PhilippLackner 20 mb is a compressed image, but when processing it converts to uncompressed bitmap that could take more than 1gb of RAM depends on resolution. Images in Android are displayed with ARGB888 with 4 bytes for 1 px. if we have image resolution 20000x20000 ( I really have one, it is space photo) Bitmap from this image has 1.5 GB size. I checked just know - if I open default image in MS Paint - it take 100-140 mb of RAM (In Task Manager) But if i open the large one - it takes 3.6 GB of RAM. The same happens when you just loading and compressing image in loop but several times! I understand that this case with 20000x20000 image is super rare, but if you develop serious apps with many active users your app will crash if try to load this image. The only workaround is to use BitmapOptions.inSampleSize and already load much more smaller image. For example Telegram compresses all images to fixed 1280px by the larger side. And Telegram doesnt crash when trying to load this image. But if use "loop" approach - it will crash 100%
If I wasn't poor I'd buy your courses. Thanks for the things you give us for free.
Earlier this year did a similar thing in my the I was working on, but my solution was to also down-scale it to a limited max 1600px (longer edge), as the project allowed to use smaller resolution images for the given purpose. As many new phones make too high resolution images for many purposes, down-scaling worked much better for me.
Best android mentor and teacher, 💯💯💯
Very useful tutorial, thanks. Can you please do a tutorial on video compression.
Can we add ensureActive() immediately after withContext block or it should be below suspending function?
I love learning with you, thanks for this! I just wanted to ask, do you have any tutorial on Speech to Text in Android?
done and dusted! ❤
Great one! Thanks ❤
Thank you ❤
Can you please plz post more Compose Multiplatform videos
Thank you very much
As different images have different clarity, How can we determine quality and total compressed bytes beforehand to avoid blurred images? Or know if the image can still be compressed more?
Hey Philipp, Could you please make a video how to navigate back from a page to previous page, by swiping left to right, current page shifts left to right revealing previous page below? Please
Sir , I new in android jetpack compose if you add compress image show after selecting in this video then very thank of you
Thanks
Compressing in loop leads to OutOfMemory and not the best solution obviously.
Trying to compress images with more than 20-30 mb leads to app crash
The app compressed 20MB images for me without any issues. Since the loop uses a new stream with each iteration, the previous one can be freed up. Therefore, there are allocations for the input byte array, the bitmap and the currently compressed byte array which even for a 20MB image is 50-60MB in memory allocations and is not a lot given what modern devices have as RAM.
@@PhilippLackner 20 mb is a compressed image, but when processing it converts to uncompressed bitmap that could take more than 1gb of RAM depends on resolution.
Images in Android are displayed with ARGB888 with 4 bytes for 1 px.
if we have image resolution 20000x20000 ( I really have one, it is space photo) Bitmap from this image has 1.5 GB size.
I checked just know - if I open default image in MS Paint - it take 100-140 mb of RAM (In Task Manager)
But if i open the large one - it takes 3.6 GB of RAM. The same happens when you just loading and compressing image in loop but several times!
I understand that this case with 20000x20000 image is super rare, but if you develop serious apps with many active users your app will crash if try to load this image.
The only workaround is to use BitmapOptions.inSampleSize and already load much more smaller image. For example Telegram compresses all images to fixed 1280px by the larger side. And Telegram doesnt crash when trying to load this image. But if use "loop" approach - it will crash 100%
Why are you using remember in MainActivity? It’s not like a counter where the value can change. How can recomposition happen here?
What about the video compression
is this possible in java also?
Course price is 9900€ then as per india Rs.832369 ruphee,Pls someone calrify me
😂