There are two ways to change the size of an image. The ImageCopyResized( ) function is available in all versions of GD, but its resizing algorithm is crude and may lead to jagged edges in your new images. The ImageCopyResampled( ) function is new in GD 2.x and features pixel interpolation to give smooth edges and clarity to resized images (it is, however, slower than ImageCopyResized( )). Both functions take the same arguments:
ImageCopyResized(dest, src, dx, dy, sx, sy, dw, dh, sw, sh); ImageCopyResampled(dest, src, dx, dy, sx, sy, dw, dh, sw, sh);
The dest and src parameters are image handles. The point (dx,dy) is the point in the destination image where the region will be copied. The point (sx,sy) is the upper-left corner of the source image. The sw, sh, dw, and dh parameters give the width and height of the copy regions in the source and destination.
Example 9-10 takes the php.jpg image shown in Figure 9-8 and smoothly scales it down to one-quarter of its size, yielding the image in Figure 9-9.
Figure 9-8. Original php.jpg image
Example 9-10. Resizing with ImageCopyResampled( )
<?php $src = ImageCreateFromJPEG('php.jpg'); $width = ImageSx($src); $height = ImageSy($src); $x = $width/2; $y = $height/2; $dst = ImageCreateTrueColor($x,$y); ImageCopyResampled($dst,$src,0,0,0,0,$x,$y,$width,$height); header('Content-Type: image/png'); ImagePNG($dst); ?>
The output of Example 9-10 is shown in Figure 9-9.
Figure 9-9. Resulting 1/4-sized image
Dividing the height and the width by 4 instead of 2 produces the output shown in Figure 9-10.
Figure 9-10. Resulting 1/16-sized image