<?php if (isset($_GET['code'])) { die(highlight_file(__FILE__1)); }
/**
* ImageText class overlays a message on a given image.
*
* @version $Id$
* @author Dan Mills <dan@lunamouse.com>
* @project codesamples
*/
class ImageText {

    
/**
    * Space between message lines
    */
    
const LINE_HEIGHT 33;

    
/**
    * Image resource property
    * @var resource
    */
    
private $im null;

    
/**
    * The file path or URL of the original image
    * @var string
    */
    
private $imgname '';

    
/**
    * A nice shade of green
    * @var int
    */
    
private $text_color null;

    
/**
    * Sets of message to overlay
    * @var array
    */
    
private $msgs = array();

    
/**
    * In case we get no messages
    * @var array
    */
    
private $default_msgs = array( array('Hello, world.') );

    
/**
    * The class constructor
    *
    * Tries to create image from a given file path or URL. If that doesn't work,
    * a blank image with an error message is created.  Either way, the new image
    * is set as the class 'im' resource.  Also sets the text_color and imgname
    * properties.
    *
    * @param string $imgname File path or URL of input image
    */
    
public function __construct$imgname ) {
        
$error false;
        
$this->im = @imagecreatefromjpeg($imgname);
        if ( !
$this->im ) {
            
$error true;
            
$this->im imagecreatetruecolor(640480);
        }

        
$this->text_color imagecolorallocate($this->im02550);
        
$this->imgname $imgname;
        if ( 
$error ) {
            
$this->addString('Error loading '.$this->imgname553);
        }
    }

    
/**
    * The class destructor
    *
    * Destroys the class 'im' resource.
    */
    
public function __destruct(  ) {
        
imagedestroy($this->im);
    }

    
/**
    * Set the object's messages.
    *
    * $msgs should be an array of arrays where each sub-array is a message made
    * up of individual lines.
    *
    * @param array $msgs
    */
    
public function setMessages$msgs ) {
        if ( 
is_array($msgs) ) { $this->msgs $msgs; }
    }

    
/**
    * Return the original jpeg with messages overlayed on it.
    */
    
public function fetch() {
        
// Define the array of $msgs.
        // Use the msgs property if it's been set, else use the default_msgs.
        // Then choose a random key from the $msgs array.
        
$num_msgs count($this->msgs);
        
$msgs $num_msgs $this->msgs $this->default_msgs;
        
$random_index rand0$num_msgs 1);

        
// Loop over each of line of the chosen message, overlaying text spaced
        // appropriately from the top.
        
$top self::LINE_HEIGHT;
        foreach ( 
$msgs[$random_index] as $line ) {
            
$this->addString($line$top);
            
$top $top self::LINE_HEIGHT;
        }
        return 
$this->im;
    }

    
/**
    * Add a line of text to the original image.
    *
    * @access private
    * @param string $msg One line of the message
    * @param int $top Space from the top of the image to the top of the text
    * @param int $left Space from the left of the image to the left of the text
    * @param int $fontsize Range of sizes from 1 (small) to 5 (big)
    */
    
private function addString ($msg$top=25$left=100$fontsize=) {
            
imagestring($this->im$fontsize$left$top$msg$this->text_color);
    }
}

?>