Limit image file size; if bigger, then decrease file size with lossy compression/resizing/etc. for saving disk space
The built-in functions will not do this.

You will have to write a hook for the form,  upload the image at the original large size and then use Imagemagick (or similar) to process the image.  

I only suggest Imagemagick because it's got more tools than GD and you should be able to re-size the image in a loop, testing for filesize and resizing/re-compressing as necessary.