class.upload.php is a powerful and mature PHP class to manage uploaded files, and manipulate images in many ways. The script is available under a GPL license.
more info about the class
$foo->image_ratio = true; $foo->image_x = 100; $foo->image_y = 200;
This will do what you describe at the start of your post. Try it, you will see.