diff options
Diffstat (limited to 'forum/utils/imagecache.php')
-rw-r--r-- | forum/utils/imagecache.php | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/forum/utils/imagecache.php b/forum/utils/imagecache.php new file mode 100644 index 0000000..aae5e66 --- /dev/null +++ b/forum/utils/imagecache.php @@ -0,0 +1,92 @@ +<?php + +include_once("config.php"); +include_once($UTIL_DIR . "/ping.php"); + + +function rescale($image) { + + $maxwidth = 300; + $maxheight = 240; + + $width = imagesx($image); + $height = imagesy($image); + + $scale = 1; + if($width > $maxwidth) $scale = $width / $maxwidth; + if($height / $scale > $maxheight) $scale = $height / $maxheight; + + $image_p = imagecreatetruecolor($width / $scale, $height / $scale); + imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width / $scale, $height / $scale, $width, $height); + + return $image_p; +} + +function errorImage($filename) +{ + /* + header('Content-Description: File Transfer'); + header('Content-Type: image/jpeg'); + header('Content-Length: ' . filesize($fullfilename)); + header('Content-Disposition: inline; filename=' . basename($filename)); + readfile($fullfilename); + */ + echo "Error fetching image: " . $filename; + die(404); +} + +function getCachedImage($filename) +{ + global $IMAGECACHE; + $fullfilename = $IMAGECACHE . "/" . urlencode($filename); + + if(!file_exists($fullfilename)) { + + $url = parse_url($filename); + $filetype = strrchr($url["path"], '.'); + + if( true || ping($url["hostname"], 1000) != -1) { + + error_reporting(E_ERROR | E_PARSE); + + switch(tolower($filetype)) { + case ".jpeg": + case ".jpg": + $image = imagecreatefromjpeg(urldecode($filename)); + if(!$image) errorImage($filename); + $image = rescale($image); + imagejpeg($image, $fullfilename, 90); + break; + + case ".gif": + $image = imagecreatefromgif(urldecode($filename)); + if(!$image) errorImage($filename); + $image = rescale($image); + imagegif($image, $fullfilename); + break; + + case ".png": + $image = imagecreatefrompng(urldecode($filename)); + if(!$image) errorImage($filename); + $image = rescale($image); + imagepng($image, $fullfilename); + break; + + default: + if(!$image) errorImage("Unknown image type " . $filetype); + break; + } + + error_reporting(E_ALL ^ E_NOTICE); + + } + } + + header('Content-Description: File Transfer'); + header('Content-Type: image/jpeg'); + header('Content-Length: ' . filesize($fullfilename)); + header('Content-Disposition: inline; filename=' . basename($filename)); + readfile($fullfilename); +} + +?>
\ No newline at end of file |