<?

/* 
	REQUIRED: 
	   * MagpieRSS, XML-based RSS parser - http://magpierss.sourceforge.net/
	   * $rss - The RSS feed URL
	   * GD library for PHP - http://www.php.net/gd	   
*/

require_once('magpierss/rss_fetch.inc');

// Send headers so browser knows a PNG is being served
header("Content-type: image/png");
header("Pragma: no-cache\nCache-control: no-cache\n"); 

class textPNG {
	var $font = 'couriernew.ttf'; // Default font. Directory relative to script directory.
	var $size = 8; // Font size.
	var $rot = 0; // Rotation in degrees.
	var $pad = 20; // Padding.
	var $transparent = 0; // Transparency; 1 = on.
	var $red = 26; // Text colour; RGB.
	var $grn = 8;
	var $blu = 158;
	var $bg_red = 178; // Background colour; RGB.
	var $bg_grn = 227;
	var $bg_blu = 234;

	function draw() {

		// REQUIRED: RSS feed URL
		$rss = fetch_rss("http://qdb.us/qdb.xml");

		$rand_element = rand(0,count($rss->items));

		$desc = html_entity_decode($rss->items[$rand_element]['description'],ENT_QUOTES); // Convert HTML entities to characters
		$search = array('@<br />@'); $desc = preg_replace($search, '', $desc); // Remove trailing <br />

		$width = 0;
		$height = 0;
		$offset_x = 0;
		$offset_y = 0;
		$bounds = array();
		$image = "";
			
		// Determine font height
		$bounds = ImageTTFBBox($this->size, $this->rot, $this->font, "W");
		if ($this->rot < 0) {
			$font_height = abs($bounds[7]-$bounds[1]);                
		} else if ($this->rot > 0) {
			$font_height = abs($bounds[1]-$bounds[7]);
		} else {
			$font_height = abs($bounds[7]-$bounds[1]);
		}

		// Determine bounding box
		$bounds = ImageTTFBBox($this->size, $this->rot, $this->font, $desc);
		if ($this->rot < 0) {
			$width = abs($bounds[4]-$bounds[0]);
			$height = abs($bounds[3]-$bounds[7]);
			$offset_y = $font_height;
			$offset_x = 0;
				
		} else if ($this->rot > 0) {
			$width = abs($bounds[2]-$bounds[6]);
			$height = abs($bounds[1]-$bounds[5]);
			$offset_y = abs($bounds[7]-$bounds[5])+$font_height;
			$offset_x = abs($bounds[0]-$bounds[6]);
					
		} else {
			$width = abs($bounds[4]-$bounds[6]);
			$height = abs($bounds[7]-$bounds[1]);
			$offset_y = $font_height;;
			$offset_x = 0;
		}
			
		// Create the image
		$image = imagecreate($width+($this->pad*2)+1,$height+($this->pad*2)+1);
			
		$background = ImageColorAllocate($image, $this->bg_red, $this->bg_grn, $this->bg_blu);
		$foreground = ImageColorAllocate($image, $this->red, $this->grn, $this->blu);
			
		if ($this->transparent) ImageColorTransparent($image, $background);
		ImageInterlace($image, false);
			
		// Render the image
		ImageTTFText($image, $this->size, $this->rot, $offset_x+$this->pad, $offset_y+$this->pad, $foreground, $this->font, $desc);

		// Output the PNG object
		imagePNG($image);
	}
}

$text = new textPNG;
$text->draw();

?>