..e può essere ottimizzato senza tutti questi cicli?
Ora è commentato xDCodice 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);
}
}