\******************************************************************************/ header('Cache-control: public'); $image = $_SERVER['QUERY_STRING']; if (substr($image, 0, 6) == 'large:') { define('LARGE', true); $image = substr($image, 6); } else { define('LARGE', false); } define('THUMB_WIDTH', LARGE ? 240 : 80); // Maximum width for thumbnails define('THUMB_HEIGHT',LARGE ? 300 : 100); // Maximum height for thumbnails define('THUMB_BACK','255,255,255'); // Background colour if (!file_exists($image)) { /* TODO: Output error image. */ die(); } if (file_exists('.thumbs/' . (LARGE ? 'large-' : '') . md5($image))) { $mtime = filemtime('.thumbs/' . (LARGE ? 'large-' : '') . md5($image)); if ($mtime >= filemtime($image)) { header('Content-type: image/jpeg'); readfile('.thumbs/' . (LARGE ? 'large-' : '') . md5($image)); exit; } } /* TODO: Optimise. */ if (($imi = @imagecreatefromjpeg($image)) === FALSE) { if (($imi = @imagecreatefrompng($image)) === FALSE) { if (($imi = @imagecreatefromgif($image)) === FALSE) { /* TODO: Output error image. */ die(); } } } $width = imagesx($imi); $height = imagesy($imi); $Rwidth = (THUMB_WIDTH/$width); $Rheight = (THUMB_HEIGHT/$height); if ($Rwidth > $Rheight) { $ratio = $Rheight; } else { $ratio = $Rwidth; } if ($width > THUMB_WIDTH || $height > THUMB_HEIGHT) { $Nwidth = $width * $ratio; $Nheight = $height * $ratio; } else { $Nheight = $height; $Nwidth = $width; } $imo = imagecreatetruecolor(THUMB_WIDTH, LARGE ? $Nheight : THUMB_HEIGHT); $colour = explode(',',THUMB_BACK); imagefill($imo,1,1,imagecolorallocate($imo,$colour[0],$colour[1],$colour[2])); imagecopyresampled($imo,$imi,(THUMB_WIDTH-$Nwidth)/2 , LARGE ? 0 : (THUMB_HEIGHT-$Nheight)/2, 0, 0, $Nwidth, $Nheight, $width, $height); header('Content-type: image/jpeg'); imagejpeg($imo, '.thumbs/' . (LARGE ? 'large-' : '') . md5($image), 100); imagejpeg($imo, false, 100); ?>