Unfortunately Apex does not have any native method of reducing the image size (or any other image transformations).
However, I have just solved the same problem :). I used javascript to change the size of the image in the browser before uploading it to Salesforce. This will work with all modern browsers. I haven't checked if it will work for older browsers.
We use this javascript: https://github.com/viliusle/Hermite-resize