..e può essere ottimizzato senza tutti questi cicli?
Codice PHP:
/*Le dimensioni massime per la thumb*/    
$maxWidth 450;
$maxHeight 300;

/*le dimensioni originali dell'immagine*/
$originalW $this->getWidth();
$originalH $this->getHeight();

/*se le dimensioni dell'immagini originali non superano le dimensioni massime che la thumb deve avere*/    
if( $originalW <= $maxWidth && $originalH <= $maxHeight )
{
    
$profileTHBWidth $originalW;
    
$profileTHBHeight $originalH;
}
/*se una delle 2 dimensioni supera le dimensioni massime*/
else if( $originalW $maxWidth || $originalH $maxHeight )
{
/*se supera la larghezza*/
    
if($originalW $maxWidth )
    {
/*il coefficienze % di rimpicciolimento a 1 cioè comincia dal 1% in meno*/
        
$coeffW 1;
        do 
        {
/*setto la larghezza della thumb con il coefficiente attuale*/
            
$profileTHBWidth $originalW-(($originalW*$coeffW)/100);
/*incremento il coefficiente*/
            
++$coeffW;
        } while( 
$profileTHBWidth $maxWidth );
/*adesso calcolo l'altezza dell'immagine utilizzando il coefficiente trovato per la larghezza, perche se rimpicciolisco solo la larghezza viene non equilibrata l'immagine*/
        
$prifileTHBHeight $originalH-(($originalH*$coeffW)/100);
/*se nonostante il resizing l'altezza è sempre maggiore dispetto all'altezza massima*/
        
if( $profileTHBHeight $maxHeight )
        {
/*setto il coefficiente di resizing dell'altezza uguale a quello della larghezza*/
            
$coeffH $coeffW;
            do 
            {
/*calcolo le nuove dimensioni usando solo il coefficiente dell'altezza, visto che con quel coefficiente la larghezza e gia minore rispetto alla larghezza massima, però diminuendo ancora l'altezza devo continuare a ricalcolare la larghezza sempre per non far uscire l'immagine sgranata.. finche l'altezza massima non diventa minore o uguale all'altezza massima*/
                
$profileTHBHeight $originalH-(($originalH*$coeffH)/100);
                
$profileTHBWidth $originalW-(($originalW*$coeffH)/100);
                ++
$coeffH;
            } while( 
$profileTHBHeight $maxHeight );
        }
        else { 
/*va bene*/ }
    }
/*se la larghezza e minore al massimo consentito, mentre invece solo l'altezza esce dal massimo consentito*/
    
else if( $originalH $maxHeight && $originalW <= $maxWidth )
    {
/*coefficiente altezza a 1%*/
        
$coeffH 1;
        do 
        {
/*calcola le dimensioni tenendo sempre tutto equilibrato*/
            
$profileTHBHeight $originalH-(($originalH*$coeffH)/100);
                        
$profileTHBWidth $originalW-(($originalW*$coeffH)/100);
            ++
$coeffH;
        } while( 
$profileTHBHeight $maxHeight );
        
$profileTHBWidth $originalW-(($originalW*$coeffH)/100);
    }

Ora è commentato xD