Lo fai usando le librerie grafiche GDLib. Data un'immagine iniziale, leggi le sue dimensioni (con la funzione getimagesize), stabilisci a priori una delle due dimensioni dell'immagine finale (ad esempio la larghezza), e calcoli l'altra in proporzione.

A questo punto usando la funzione imagecopyresized ottieni ciò che vuoi.