prova a vedere se questo ti aiuta..

codice:
      if($width_orig>$height_orig) { // FOTO ORIZZONTALE
        $xg=$Xmax;
        $yg=($Xmax/$width_orig)*$height_orig;
        $xt=$x;
        $yt=floatval(($x/$width_orig)*$height_orig);
      } else {
        $xg=($Ymax/$height_orig)*$width_orig;                    // FOTO VERTICALE
        $yg=$Ymax;
        $xt=floatval(($y/$height_orig)*$width_orig);
        $yt=$y;
      }
in pratica $width_orig e $height_orig li prendo con getimagesize dall'originale.

Dopo di che se la foto è orizzontale setto xg (per la foto ridimensionata grande) e xt (per la thumbnail) al valore massimo da me settato, e ottengo y facendo una semplice proporzione matematica, viceversa per la foto verticale.

Scusa se non ho guardato direttamente il codice, ma anche se banale come soluzione, ci avevo sclerato sopra e riaffrontarlo mi crea la nausea...