I think the better way is not in any way changing the uploaded file, instead resizing it when it's actually requested by a client. This way, your pages can ask server for whatever actual size they need in the moment instead of setting image size once in stone. Like, if you've uploaded kitty.jpg, you can then ask for kitty_120x50.jpg or kitty_300x.jpg or kitty_x200.jpg (with missing dimension being calculated to preserve ratio).
If course, resized files are stored along with the original to avoid costly resizing process each time. If there's already a copy with required sizes, it's served really, really fast.