# Calculating image size ratio for resizing

Here’s code from my personal grab bag of image resizing code. First, data you need:

``````list(\$originalWidth, \$originalHeight) = getimagesize(\$imageFile);
\$ratio = \$originalWidth / \$originalHeight;
``````

Then, this algorithm fits the image into the target size as best it can, keeping the original aspect ratio, not stretching the image larger than the original:

``````\$targetWidth = \$targetHeight = min(\$size, max(\$originalWidth, \$originalHeight));

if (\$ratio < 1) {
\$targetWidth = \$targetHeight * \$ratio;
} else {
\$targetHeight = \$targetWidth / \$ratio;
}

\$srcWidth = \$originalWidth;
\$srcHeight = \$originalHeight;
\$srcX = \$srcY = 0;
``````

This crops the image to fill the target size completely, not stretching it:

``````\$targetWidth = \$targetHeight = min(\$originalWidth, \$originalHeight, \$size);

if (\$ratio < 1) {
\$srcX = 0;
\$srcY = (\$originalHeight / 2) - (\$originalWidth / 2);
\$srcWidth = \$srcHeight = \$originalWidth;
} else {
\$srcY = 0;
\$srcX = (\$originalWidth / 2) - (\$originalHeight / 2);
\$srcWidth = \$srcHeight = \$originalHeight;
}
``````

And this does the actual resizing:

``````\$targetImage = imagecreatetruecolor(\$targetWidth, \$targetHeight);
imagecopyresampled(\$targetImage, \$originalImage, 0, 0, \$srcX, \$srcY, \$targetWidth, \$targetHeight, \$srcWidth, \$srcHeight);
``````

In this case the `\$size` is just one number for both width and height (square target size). I’m sure you can modify it to use non-square targets. It should also give you an inspiration on what other resizing algorithms you can use.

Categories php