thedonedeal 12 Newbie Poster

http://www.daniweb.com/forums/thread161547.html

(I didn't want to post to a nearly three year old thread but I didn't know where else to post this...)

A while ago someone introduced the idea of using imgsize.php to resize their images on the fly in the <IMG src=''> manner. Then someone noted that using this script would cause black backgrounds to appear in PNG/GIF formats where transparency was turned on.

After doing some testing, partially, I managed to merge the notion of both of them into one file as noted below:

<?php
/*
JPEG / PNG Image Resizer
Parameters (passed via URL):

img = path / url of jpeg or png image file

percent = if this is defined, image is resized by it's
          value in percent (i.e. 50 to divide by 50 percent)

w = image width

h = image height

constrain = if this is parameter is passed and w and h are set
            to a size value then the size of the resulting image
            is constrained by whichever dimension is smaller

Requires the PHP GD Extension

Outputs the resulting image in PNG or JPEG Format, depending on if transparency was detected.

By: Michael John G. Lopez - www.sydel.net
Updated by: Paul Williams - retched.iwle.com
Filename : imgsize.php
*/

$img = $_GET['img'];
$percent = $_GET['percent'];
$constrain = $_GET['constrain'];
$w = $_GET['w'];
$h = $_GET['h'];

// get image size of img
$x = @getimagesize($img);
// image width
$sw = $x[0];
// image height
$sh = $x[1];

if ($percent > 0) {
    // calculate resized height and width if percent is defined
    $percent = $percent * 0.01;
    $w = $sw * $percent;
    $h = $sh * $percent;
} else {
    if (isset ($w) AND !isset ($h)) {
        // autocompute height if only width is set
        $h = (100 / ($sw / $w)) * .01;
        $h = @round ($sh * $h);
    } elseif (isset ($h) AND !isset ($w)) {
        // autocompute width if only height is set
        $w = (100 / ($sh / $h)) * .01;
        $w = @round ($sw * $w);
    } elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
        // get the smaller resulting image dimension if both height
        // and width are set and $constrain is also set
        $hx = (100 / ($sw / $w)) * .01;
        $hx = @round ($sh * $hx);

        $wx = (100 / ($sh / $h)) * .01;
        $wx = @round ($sw * $wx);

        if ($hx < $h) {
            $h = (100 / ($sw / $w)) * .01;
            $h = @round ($sh * $h);
        } else {
            $w = (100 / ($sh / $h)) * .01;
            $w = @round ($sw * $w);
        }
    }
}

$im = @ImageCreateFromJPEG ($img) or // Read JPEG Image
$im = @ImageCreateFromPNG ($img) or // or PNG Image
$im = @ImageCreateFromGIF ($img) or // or GIF Image
$im = false; // If image is not JPEG, PNG, or GIF


if (!$im) {
    // We get errors from PHP's ImageCreate functions...
    // So let's echo back the contents of the actual image.
    readfile ($img);
} else {
// We need to keep the images transparency. Transparency is only applied to JPEG and PNGs.

    // Create the resized image destination
    $thumb = @ImageCreateTrueColor ($w, $h);

    if (@ImageCreateFromPNG($img) || @ImageCreateFromGIF($img)) {
      $transparency = @imagecolortransparent($im);

     if ($transparency >= 0) {
        $transparent_color = @imagecolorsforindex($im, $trnprt_indx);
        $transparency = @imagecolorallocate($thumb, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
        @imagefill($thumb, 0, 0, $transparency);
        @imagecolortransparent($thumb, $transparency);
      }
      elseif ($x[2] == IMAGETYPE_PNG) {
        @imagealphablending($thumb, false);
        $color = @imagecolorallocatealpha($thumb, 0, 0, 0, 127);
        @imagefill($thumb, 0, 0, $color);
        @imagesavealpha($thumb, true);
      }
    }



    $mime = image_type_to_mime_type($x[2]);
    header("Content-type: $mime");

    // Copy from image source, resize it, and paste to image destination
    @ImageCopyResampled ($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);
    // Output resized image
    if (isset($transparency)) @ImagePNG($thumb);
    else @ImageJPEG($thumb);
}
?>

Please let me know what you think.