Try this on all Android versions:
To avoid storage permission issues, use ActivityStarter instead of ImagePicker (see my blocks below). Also, use Sunny's Picasso extension instead of the Image component. This allows you to display the image without READ
permission by accessing the source image's contentUri. This works not only on Android 11+, but also on Android < 11.
On Android 11+, you can also copy the selected image to /Pictures/ using its contentUri under a new name, giving you full access to this file via the app and requiring neither storage permissions nor SAF.
On Android < 11, of course, WRITE
permission is required to modify/compress the image, etc. That's it. It couldn't be simpler.
In summary:
On Android 11+, no permissions are required for this at all (not even for modifying/compressing the image). On Android 6-10 it must be explicitly requested. Below it is granted automatically at install-time.