GD is kinda weak. ImageMagick is much better and the license is free.
The only trick is that it's not part of PHP itself, so you have to fork() a process which takes a performance hit.
Since images are likely going to be viewed again, I write code that:
1) Checks for a saved copy. If one is found, it's spit back out.
2) If not, generate the resampled image, save the result, then spit out the saved results.
In fact, I resize the images thru a function call (X/Y size parameters) and save the resized image with those values, so that I can call an image of any size and still cache the result. To keep things clean, A cron script deletes all resized files over 3 months old.
This gives a good combination of performance and flexibility.
-Ben