The script provided below “res.php” is designed to scale images that are then used in HEADER css of the html page. The images are called depending on the “CID” (Club ID). Each Club has there information stored in the database including one called club_header. The club_header is a VARCHAR that stores absolute image location (file-system or web). The “res.php” function is to call image and output it to browser as well as re-size the image to whatever the settings are set for. By default the settings are 960 x 200.
However do to some reason the script is not doing what it has to be and outputs a broken image instead. What may the problem be with the code?
Some server + php info if needed
Server: Apache v2.2.21, PHP v5.3.8, SQL v5.5.16, GD v2.0.34
PHP.ini: max_execution_time = 300, max_input_time = 60, memory_limit = 208M, post_max_size = 24M
“res.php” source-code
require("php/db.class.php");
function scaleImageFileToBlob($file) {
$file = $_GET['cid'];
$query = mysql_query("SELECT * FROM clubs WHERE club_id = '".$_GET['cid']."'");
$obj = mysql_fetch_array($query);
$photoObj = $obj['club_header'];
$source_pic = $photoObj;
$max_width = 960;
$max_height = 200;
list($width, $height, $image_type) = getimagesize($file);
switch ($image_type)
{
case 1: $src = imagecreatefromgif($file); break;
case 2: $src = imagecreatefromjpeg($file); break;
case 3: $src = imagecreatefrompng($file); break;
default: return ''; break;
}
$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;
if( ($width <= $max_width) && ($height <= $max_height) ){
$tn_width = $width;
$tn_height = $height;
}elseif (($x_ratio * $height) < $max_height){
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}else{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$tmp = imagecreatetruecolor($tn_width,$tn_height);
/* Check if this image is PNG or GIF, then set if Transparent*/
if(($image_type == 1) OR ($image_type==3))
{
imagealphablending($tmp, false);
imagesavealpha($tmp,true);
$transparent = imagecolorallocatealpha($tmp, 255, 255, 255, 127);
imagefilledrectangle($tmp, 0, 0, $tn_width, $tn_height, $transparent);
}
imagecopyresampled($tmp,$src,0,0,0,0,$tn_width, $tn_height,$width,$height);
/*
* imageXXX() only has two options, save as a file, or send to the browser.
* It does not provide you the oppurtunity to manipulate the final GIF/JPG/PNG file stream
* So I start the output buffering, use imageXXX() to output the data stream to the browser,
* get the contents of the stream, and use clean to silently discard the buffered contents.
*/
ob_start();
switch ($image_type)
{
case 1: imagegif($tmp); break;
case 2: imagejpeg($tmp, NULL, 100); break; // best quality
case 3: imagepng($tmp, NULL, 0); break; // no compression
default: echo ''; break;
}
$final_image = ob_get_contents();
ob_end_clean();
return $final_image;
}
echo scaleImageFileToBlob($file);
Thank you in advance.
You might need to send the correct header before the image output, such as