\******************************************************************************/
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);
?>