There are two basic ways to resize images for
Internet display, and there are two basic reasons for wanting them
resized. The first two things you need to remember when you're setting
up your resize script.
Resizing Images with PHP
Two Ways to Resize Images
Images you may want for your website come in an infinite variety of
dimensions for display. But when you're resizing them, you need to pay
attention to file size as well. If you were to resize a large picture
in a graphics editor like Photoshop, you would change its default
display size as well as its file size. But if you resize a picture by
changing its dimensions in HTML, you're only changing the way it
displays. The file is still the same size.
This has important ramifications, particularly if you're
working in a graphics-heavy page. Large file sizes take longer to
download, even with fast servers and speedy connections. One or two
images on your page won't slow it down much. But if you're serving up
thumbnails of a dozen or more books or art prints, you need to have
small images that won't clog your viewer's bandwidth. For these types
of images, you need to physically shrink images or to limit the number
of images on your page.
Here's the problem. Basic PHP only resizes images in the way
they display in HTML. That means if you have tons of shrunken images on
your page, they are going to download very slowly. If you want to be
able to serve up image-heavy pages without download problems, you'll
need to either shrink them outside your site or use a PHP add-in
program like Mogrify. Another problem with resizing them on the fly
like this is that it will take up server resources. If you have a busy
page, again, you're better off creating the thumbnails off-site and
loading them as alternate images.
Two Reasons for Wanting Images Resized On The Fly
The two most common reasons for resizing images on your server are
having a large image database you have integrated with your website,
and having an active community who upload images to your site that you
want to be able to browse by thumbnails. In both cases, you're looking
at creating thumbnails. Considering the issues with doing this, you're
probably better off limiting these pages to a display of maybe a
half-dozen images at a time.
But another good reason for resizing images on the fly, and one
that is workable within PHP's limits, is changing advertising. Suppose
you sell books on your site. You want an easy way to put up a rotating
Top Selection on your main page, but you don't want to mess around with
resizing dozens of cover shots. You can put a script into the Top
Selection area that will resize your chosen cover shot for you; and you
can use the same script to show that single image in a variety of sizes
on your main page and on any subsidiary pages you are using to sell as
well.
Resizing That Image
The first two things you need to remember when you're setting up
your resize script is that you want to be able to use a single image
for each product, and that you need for this image to retain its aspect
ratio.
So, start by declaring your function. This PHP function is a very simple math-based script:
<?php
//declare your variables
function imgResize($width, $height, $target) {
//takes the larger size of the width and height and applies the
formula. Your function is designed to work with any image in any size.
if ($width > $height) {
$percentage = ($target / $width);
} else {
$percentage = ($target / $height);
}
//gets the new value and applies the percentage, then rounds the value
$width = round($width * $percentage);
$height = round($height * $percentage);
//returns the new sizes in html image tag format...this is so you
can plug this function inside an image tag so that it will set the
image to the correct size, without putting a whole script into the tag.
return "width=\"$width\" height=\"$height\"";
}
?>
As you can see, your image resizing is based on the percentage. The
script uses basic algebra to look at the original width or height of
the picture and determine what percentage you're shrinking it to, and
then it will multiply the other dimension by the same percentage to see
what value to assign it.
Next, you need to find the width and height of the image you're
planning to display; the command in PHP for this is getimagesize().
This command returns image width, height, and type -- in HTML tag
format (width="x" height="y"), if you wish.
$mypicture = getimagesize("images/picture01.jpg");
You've just created an array called $mypicture that holds
important information about the image you're going to display. Inside
the array, index0 will hold the width ($mypicture[0]), and index1 will
hold the height ($mypicture[1]).
Now you're ready to resize your images.
Suppose the space you have allotted for your thumbnail book
covers is 100 pixels x 100 pixels. Starting with your array $mypicture,
you would write:
<?php
//get the image size of the picture and load it into an array
$mypicture = getimagesize("images/picture01.jpg");
?>
Now you can call this array with a standard HTML tag, allotting the different numbers for the array in the appropriate places.
<img src="images/picture01.jpg" <?php imageResize($mypicture[0],
$mypicture[1], 100); ?>l>
This resizes your image to fit into your 100-pixel-square box. The
larger dimension is shrunk into 100 pixels, and the smaller dimension
will be proportionately less. Not so hard, right? Make sure that before
you set up each picture, you create a new array. You can keep the array
definition together with the image source code.
You absolutely must remember that this resize is not changing
the file size, but only the display size. There is a good side to this,
however. If you're serving pictures that you want people to be able to
easily download, they can right-click directly on the thumbnail and
save the image; in their computer, it re-expands to its normal default
size instead of saving as a thumbnail.
|