# Posted By

dblack on 05/07/11

# Statistics

Viewed 318 times
Favorited by 0 user(s)

# Image Scaling within Limits (max height, max width)

/ Published in: PHP
`function scale_dimensions_within_limits(\$w,\$h,\$max_w,\$max_h){  // \$w is the width of the current rectangle   // \$h is the height of the current rectangle   // \$max_w is the maximum width that an image can be sized   // \$max_h is the maximum height that an image can be sized    // **** Here's where the magic is starts ****   // Switch the concept of horiz/vertical/square to long/short side   \$short_side_len = (\$w < \$h ? \$w : \$h);   \$long_side_len = (\$w > \$h ? \$w : \$h);   // Set a variable to the variable name of the output variable  \$ssvar = (\$w > \$h ? 'h':'w');   \$lsvar = (\$w > \$h ? 'w':'h');   \$maxLSvar = "max_".\$lsvar;   \$maxSSvar = "max_".\$ssvar;    // Do the first pass on the long side  \$ratio = \$\$maxLSvar/\$long_side_len;   \$newSS = round(\$short_side_len * \$ratio);   \$newLS = round(\$long_side_len * \$ratio);    // *** Note - the only coditional block!  // If short side is still out of limit, limit the short side and adjust   if(\$newSS > \$\$maxSSvar){     \$ratio = \$\$maxSSvar/\$newSS;     \$newLS = round(\$ratio*\$newLS);     \$newSS = \$\$maxSSvar;   }    // **** Here's where the magic ends ****   // Re-couple the h/w (or w/h) with the long/shortside counterparts   // \$\$ means it's a variable variable (dynamic assignment)   \$\$ssvar = \$newSS;   \$\$lsvar = \$newLS;   // Prep the return array   \$dimensions['w'] = \$w; // this is derived from either \$ssvar or \$lsvar   \$dimensions['h'] = \$h; return \$dimensions; }`