Location: PHPKode > projects > WebERP > webERP/GetStockImage.php
<?php

/* $Id: GetStockImage.php 4707 2011-10-01 06:40:49Z daintree $*/

include ('includes/session.inc');
/*
http://127.0.0.1/~brink/webERP/GetStockImage.php
?automake=1&width=81&height=74&stockid=&textcolor=FFFFF0&bevel=3&text=aa&bgcolor=007F00

automake - if specified allows autocreate images
stockid - if not specified it produces a blank image if set to empty string uses default stock image
bgcolor   - Background color specified in hex
textcolor - Forground color specified in hex
transcolor - Transparent color specified in hex
width - if specified scales image to width
height - if specified scales image to height
transparent - if specfied uses bgcolor as transparent unless specified
text - if specified override stockid to be printed on image
bevel - if specified draws a drop down bevel

*/
// Color decode function
function DecodeBgColor( $ColourStr ) {
	if ( $ColourStr[0] == '#' ) {
		$ColourStr = mb_substr($ColourStr,1,mb_strlen($ColourStr));
	}
	$Red = 0;
	if(mb_strlen($ColourStr) > 1) {
		$Red = hexdec(mb_substr($ColourStr,0,2));
		$ColourStr = mb_substr($ColourStr,2,mb_strlen($ColourStr));
	}
	$Green = 0;
	if(mb_strlen($ColourStr) > 1) {
		$Green = hexdec(mb_substr($ColourStr,0,2));
		$ColourStr = mb_substr($ColourStr,2,mb_strlen($ColourStr));
	}
	$Blue = 0;
	if(mb_strlen($ColourStr) > 1) {
		$Blue = hexdec(mb_substr($ColourStr,0,2));
		$ColourStr = mb_substr($ColourStr,2,mb_strlen($ColourStr));
	}
	if(mb_strlen($ColourStr) > 1) {
		$Alpha = hexdec(mb_substr($ColourStr,0,2));
		$ColourStr = mb_substr($ColourStr,2,mb_strlen($ColourStr));
	}
	if ( isset($Alpha) )
		return array('red' => $Red, 'green' => $Green, 'blue' => $Blue, 'alpha' => $Alpha );
	else
		return array('red' => $Red, 'green' => $Green, 'blue' => $Blue );
}

if (!function_exists('imagecreatefrompng')){
	$title = _('Image Manipulation Script Problem');
	include('includes/header.inc');
	prnMsg(_('This script requires the gd image functions to be available to php - this needs to be enabled in your server php version before this script can be used'),'error');
	include('includes/footer.inc');
	exit;
}
$DefaultImage = 'webERPsmall.png';

$FilePath =  $_SESSION['part_pics_dir'] . '/';

$StockID = trim(mb_strtoupper($_GET['StockID']));
if( isset($_GET['bgcolor']) )
	$BackgroundColour = $_GET['bgcolor'];
if( isset($_GET['textcolor']) )
	$TextColour = $_GET['textcolor'];
if( isset($_GET['width']) )
	$width = $_GET['width'];
if( isset($_GET['height']) )
	$height = $_GET['height'];
if( isset($_GET['scale']) )
	$scale = $_GET['scale'];
if( isset($_GET['automake']) )
	$automake = $_GET['automake'];
if( isset($_GET['transparent'])) {
	$doTrans = true;
}
if( isset($_GET['text']) ) {
	$text = $_GET['text'];
}
if( isset($_GET['transcolor'])) {
	$doTrans = true;
	$TranspColour = $_GET['transcolor'];
} else {
	$doTrans = false;
}
if( isset($_GET['bevel']) ) {
	$bevel = $_GET['bevel'];
} else {
	$bevel = false;
}

if( isset($_GET['fontsize']) ) {
	$fontsize = $_GET['fontsize'];
} else {
	$fontsize = 3;
}
if( isset($_GET['notextbg']) ) {
	$notextbg = true;
} else {
	$notextbg = false;
}





// Extension requirements and Stock ID Isolation
if($StockID == '') {
	$StockID = $DefaultImage;
	$blanktext = true;
}

$i = strrpos($StockID,'.');
if( $i === false )
  	$type = 'png';
else {
	$type   = strtolower(mb_substr($StockID,$i+1,mb_strlen($StockID)));
	$StockID = mb_substr($StockID,0,$i);
	if($blanktext && !isset($text))
		$text = '';
}
$style = $type;
$functype = $type;
if ( $style == 'jpg' ) {
	$style = 'jpeg';
	$functype = 'jpeg';
}

$tmpFileName = $FilePath.$StockID;
// First check for an image this is not the type requested
if ( file_exists($tmpFileName.'.jpg') ) {
	$FileName = $StockID.'.jpg';
	$IsJpeg = true;
} elseif (file_exists($tmpFileName.'.jpeg')) {
	$FileName = $StockID.'.jpeg';
	$IsJpeg = true;
} elseif (file_exists($tmpFileName.'.png')) {
	$FileName = $StockID.'.png';
	$IsJpeg = false;
} else {
	$FileName = $DefaultImage;
	$IsJpeg = $DefaultIsJpeg;
}
if( !$automake && !isset($FileName) ) {
		$title = _('Stock Image Retrieval ....');
		include('includes/header.inc');
		prnMsg( _('The Image could not be retrieved because it does not exist'), 'error');
		echo '<br /><a href="' .$rootpath .'/index.php?' . SID . '">'.  _('Back to the menu'). '</a>';
		include('includes/footer.inc');
		exit;
}

// See if we need to automake this image
if( $automake AND !isset($FileName) ) {
	// Have we got height and width specs
	if( !isset($width) )
		$width = 64;
	if( !isset($height) )
		$height = 64;
	// Have we got a background color
	$im = imagecreate($width, $height);
	if( isset($BackgroundColour) )
		$BackgroundColour = DecodeBgColor( $BackgroundColour );
	else
		$BackgroundColour = DecodeBgColor( '#7F7F7F' );
	if( !isset($BackgroundColour['alpha']) ) {
		$ixbgcolor = imagecolorallocate($im,
			$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue']);
	} else {
		$ixbgcolor = imagecolorallocatealpha($im,
			$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue'],$BackgroundColour['alpha']);
	}
	// Have we got a text color
	if( isset($TextColour) )
		$TextColour = DecodeBgColor( $TextColour );
	else
		$TextColour = DecodeBgColor( '#000000' );
	if( !isset($TextColour['alpha']) ) {
		$ixtextcolor = imagecolorallocate($im,
			$TextColour['red'],$TextColour['green'],$TextColour['blue']);
	} else {
		$ixtextcolor = imagecolorallocatealpha($im,
			$TextColour['red'],$TextColour['green'],$TextColour['blue'],$TextColour['alpha']);
	}
	// Have we got transparency requirements
	if( isset($TranspColour) ) {
		$TranspColour = DecodeBgColor( $TranspColour );
		if( $TranspColour != $BackgroundColour ) {
			if( !isset($TextColour['alpha']) ) {
				$ixtranscolor = imagecolorallocate($im,
					$TranspColour['red'],$TranspColour['green'],$TranspColour['blue']);
			} else {
				$ixtranscolor = imagecolorallocatealpha($im,
					$TranspColour['red'],$TranspColour['green'],$TranspColour['blue'],$TranspColour['alpha']);
			}
		} else {
			$ixtranscolor = $ixbgcolor;
		}
	}
	imagefill($im, 0, 0, $ixbgcolor );

	if( $doTrans ) {
		imagecolortransparent($im, $ixtranscolor);
	}

	if(!isset($text))
		$text = $StockID;
	if(mb_strlen($text) > 0 ) {
		$fw = imagefontwidth($fontsize);
		$fh = imagefontheight($fontsize);
		$fy = (imagesy($im) - ($fh)) / 2;
		$fyh = $fy + $fh - 1;
		$textwidth = $fw * mb_strlen($text);
		$px = (imagesx($im) - $textwidth) / 2;
		if (!$notextbg)
			imagefilledrectangle($im,$px,$fy,imagesx($im)-($px+1),$fyh, $ixtextbgcolor );
		imagestring($im, $fontsize, $px, $fy, $text, $ixtextcolor);
	}

} else {
	$tmpFileName = $FilePath.$FileName;
	if( $IsJpeg ) {
		$im = imagecreatefromjpeg($tmpFileName);
	} else {
		$im = imagecreatefrompng($tmpFileName);
	}
	// Have we got a background color
	if( isset($BackgroundColour) )
		$BackgroundColour = DecodeBgColor( $BackgroundColour );
	else
		$BackgroundColour = DecodeBgColor( '#7F7F7F' );
	if( !isset($BackgroundColour['alpha']) ) {
		$ixbgcolor = imagecolorallocate($im,
			$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue']);
	} else {
		$ixbgcolor = imagecolorallocatealpha($im,
			$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue'],$BackgroundColour['alpha']);
	}
	// Have we got a text color
	if( isset($TextColour) )
		$TextColour = DecodeBgColor( $TextColour );
	else
		$TextColour = DecodeBgColor( '#000000' );
	if( !isset($TextColour['alpha']) ) {
		$ixtextcolor = imagecolorallocate($im,
			$TextColour['red'],$TextColour['green'],$TextColour['blue']);
	} else {
		$ixtextcolor = imagecolorallocatealpha($im,
			$TextColour['red'],$TextColour['green'],$TextColour['blue'],$TextColour['alpha']);
	}
	
	$sw = imagesx($im);
	$sh = imagesy($im);
	if ( isset($width) AND ($width != $sw) OR isset($height) AND ($height != $sh)) {
		if( !isset($width) )
			$width = imagesx($im);
		if( !isset($height) )
			$height = imagesy($im);
			$resize_scale = min($width/$sw, $height/$sh);
		if ($resize_scale < 1) {
			$resize_new_width = floor($resize_scale*$sw);
			$resize_new_height = floor($resize_scale*$sh);
		} else {
			$resize_new_width = $sw;
			$resize_new_height = $sh;
		}
		
		$tmpim = imagecreatetruecolor($resize_new_width, $resize_new_height);
		imagealphablending ( $tmpim, true);
		imagecopyresampled($tmpim,$im,0,0,0,0,$resize_new_width, $resize_new_height, $sw, $sh );
		imagedestroy($im);
		$im = $tmpim;
		unset($tmpim);

		if( !isset($BackgroundColour['alpha']) ) {
			$ixbgcolor = imagecolorallocate($im,
				$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue']);
		} else {
			$ixbgcolor = imagecolorallocatealpha($im,
				$BackgroundColour['red'],$BackgroundColour['green'],$BackgroundColour['blue'],$BackgroundColour['alpha']);
		}
		if( !isset($TextColour['alpha']) ) {
			$ixtextcolor = imagecolorallocate($im,
				$TextColour['red'],$TextColour['green'],$TextColour['blue']);
		} else {
			$ixtextcolor = imagecolorallocatealpha($im,
				$TextColour['red'],$TextColour['green'],$TextColour['blue'],$TextColour['alpha']);
		}
		//imagealphablending ( $im, false);
	}
	// Have we got transparency requirements
	if( isset($TranspColour) ) {
		$TranspColour = DecodeBgColor( $TranspColour );
		if( $TranspColour != $BackgroundColour ) {
			if( !isset($TextColour['alpha']) ) {
				$ixtranscolor = imagecolorallocate($im,
					$TranspColour['red'],$TranspColour['green'],$TranspColour['blue']);
			} else {
				$ixtranscolor = imagecolorallocatealpha($im,
					$TranspColour['red'],$TranspColour['green'],$TranspColour['blue'],$TranspColour['alpha']);
			}
		} else {
			$ixtranscolor = $ixbgcolor;
		}
	}
	if( $doTrans ) {
		imagecolortransparent($im, $ixtranscolor);
	}
	if( $doTrans )
		$ixtextbgcolor = $ixtranscolor;
	else
	    $ixtextbgcolor = $ixbgcolor;
//	$ixtextbgcolor = imagecolorallocatealpha($im,
//		0,0,0,0);
	if(!isset($text))
		$text = $StockID;
	if(mb_strlen($text) > 0 ) {
		$fw = imagefontwidth($fontsize);
		$fh = imagefontheight($fontsize);
		$fy = imagesy($im) - ($fh);
		$fyh = imagesy($im) - 1;
		$textwidth = $fw * mb_strlen($text);
		$px = (imagesx($im) - $textwidth) / 2;
		if (!$notextbg)
			imagefilledrectangle($im,$px,$fy,imagesx($im)-($px+1),$fyh, $ixtextbgcolor );
		imagestring($im, $fontsize, $px, $fy, $text, $ixtextcolor);
	}
}
// Do we need to bevel
if( $bevel ) {
	$drgray = imagecolorallocate($im,63,63,63);
	$silver = imagecolorallocate($im,127,127,127);
	$white = imagecolorallocate($im,255,255,255);
	imageline($im, 0,0,imagesx($im)-1, 0, $drgray); // top
	imageline($im, 0,1,imagesx($im)-1, 1, $drgray); // top
	imageline($im, 1,0,1, imagesy($im)-1, $drgray); // left
	imageline($im, 0,0,0, imagesy($im)-1, $drgray); // left
	imageline($im, 0,imagesy($im)-1,imagesx($im)-1, imagesy($im)-1, $silver); // bottom
	imageline($im, imagesx($im)-1,0,imagesx($im)-1, imagesy($im)-1, $silver); // right
}
// Set up headers
header('Content-Disposition: filename='.$StockID.'.'.$type);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-type: image/'.$style);
// Which function should we use jpeg or png
//images
$func = 'image'.$functype;
// AND send image
$func($im);
// Destroy image
imagedestroy($im);
?>
Return current item: WebERP