Source for file Image.class.php
Documentation is available at Image.class.php
* This work is hereby released into the Public Domain.
* To view a copy of the public domain dedication,
* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
if(is_file(dirname(__FILE__ ). "/Artichow.cfg.php")) { // For PHP 4+5 version
require_once dirname(__FILE__ ). "/Artichow.cfg.php";
* Register a class with the prefix in configuration file
eval ($abstract. " class ". ARTICHOW_PREFIX. $class. " extends aw". $class. " { }");
* Register an interface with the prefix in configuration file
eval ("interface ". ARTICHOW_PREFIX. $interface. " extends aw". $interface. " { }");
require_once ARTICHOW. "/Component.class.php";
require_once ARTICHOW. "/inc/Grid.class.php";
require_once ARTICHOW. "/inc/Tools.class.php";
require_once ARTICHOW. "/inc/Driver.class.php";
require_once ARTICHOW. "/inc/Math.class.php";
require_once ARTICHOW. "/inc/Tick.class.php";
require_once ARTICHOW. "/inc/Axis.class.php";
require_once ARTICHOW. "/inc/Legend.class.php";
require_once ARTICHOW. "/inc/Mark.class.php";
require_once ARTICHOW. "/inc/Label.class.php";
require_once ARTICHOW. "/inc/Text.class.php";
require_once ARTICHOW. "/inc/Color.class.php";
require_once ARTICHOW. "/inc/Font.class.php";
require_once ARTICHOW. "/inc/Gradient.class.php";
require_once ARTICHOW. "/inc/Shadow.class.php";
require_once ARTICHOW. "/inc/Border.class.php";
require_once ARTICHOW. "/common.php";
* @package linea21.externals
* Get driver of the image
* @param int $w Driver width (from 0 to 1) (default to 1)
* @param int $h Driver height (from 0 to 1) (default to 1)
* @param float $x Position on X axis of the center of the driver (default to 0.5)
* @param float $y Position on Y axis of the center of the driver (default to 0.5)
public function getDriver($w = 1, $h = 1, $x = 0.5, $y = 0.5) {
$this->driver->setSize($w, $h);
$this->driver->setPosition($x, $y);
* Sets the driver that will be used to draw the graph
* @param string $driverString
* @var int $width Image width
* @var int $height Image height
public function setSize($width, $height) {
$this->width = (int) $width;
* Change image background
* @param mixed $background
if($background instanceof awColor) {
* Change image background color
* Change image background gradient
* @param awGradient $gradient
* Return image background, whether a Color or a Gradient
* Turn antialiasing on or off
* Return the antialiasing setting
* @var int $format New image format
* Returns the image format as an integer
* Returns the image format as a string
* Select the correct driver
* @param string $driver The desired driver
require_once ARTICHOW. '/inc/drivers/gd.class.php';
// We should never get here, unless the wrong string is used AND the ARTICHOW_DRIVER
// global has been messed with.
* Draw a component on the image
* @var awComponent $component A component
$shadow = $this->shadow->getSpace(); // Image shadow
$border = $this->border->visible() ? 1 : 0; // Image border size
$driver = clone $this->driver;
$this->width - $shadow->left - $shadow->right - $border * 2,
$this->height - $shadow->top - $shadow->bottom - $border * 2
// No absolute size specified
if($component->w === NULL and $component->h === NULL) {
list ($width, $height) = $driver->setSize($component->width, $component->height);
// Set component size in pixels
$component->setAbsSize($width, $height);
$driver->setAbsSize($component->w, $component->h);
if($component->top !== NULL and $component->left !== NULL) {
$border + $shadow->left + $component->left,
$border + $shadow->top + $component->top
$driver->setPosition($component->x, $component->y);
$driver->movePosition($border + $shadow->left, $border + $shadow->top);
list ($x1, $y1, $x2, $y2) = $component->getPosition();
$component->init($driver);
$component->drawComponent($driver, $x1, $y1, $x2, $y2, $this->antiAliasing);
$component->drawEnvelope($driver, $x1, $y1, $x2, $y2);
$component->finalize($driver);
* Send the image into a file or to the user browser
* Return the image content as binary data
return $this->driver->get($this);
* Send the correct HTTP header according to the image type
private static $errorWriting = FALSE;
* Display an error image and exit
* @param string $message Error message
if(self::$errorWriting) {
self::$errorWriting = TRUE;
$message = wordwrap($message, 40, "\n", TRUE);
$image->setSize($width, $height);
$driver = $image->getDriver();
$driver->filledRectangle(
$driver->filledRectangle(
$driver->string($text, new awPoint(5, 6));
new awPoint($width - 90, $height - 1)
new awPoint($width - 81, $height - 81),
new awPoint($width - 1, $height - 1)
$driver->string($text, new awPoint(10, 40));
* Display an error image located in a file and exit
* @param string $error Error name
$file = ARTICHOW_IMAGE. DIRECTORY_SEPARATOR. 'errors'. DIRECTORY_SEPARATOR. $error. '.png';
header("Content-Type: image/png");
* Load an image from a file
* @package linea21.externals
* @param string $file Image file name
$driver->initFromFile($this, $file);
|