This looks like a nice option wordpress.org/plugins/fly-dynamic-image-resizer
Here's a part from the plugin description:
How this plugin works
- You either define an image size in your code using the fly_add_image_size() function, or directly call the image size in the code
- The admin uploads the image in the media library, but the fly dynamic images are not created
- The user visits the page for the first time, and the image is dynamically created and is stored
- The user visits the page again for the second time, and the stored version of the image is served
github: github.com/junaidbhura/fly-dynamic-image-resizer
Hope it helps :)