--- /dev/null
+<?php
+/**
+ * A general image class
+ *
+ * @author Roland Haeder <webmaster@ship-simu.org>
+ * @version 0.0.0
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class BaseImage extends BaseFrameworkSystem implements Registerable {
+ /**
+ * Image type
+ */
+ private $imageType = "";
+
+ /**
+ * Width of the image
+ */
+ private $width = "";
+
+ /**
+ * Height of the image
+ */
+ private $height = "";
+
+ /**
+ * Background color in RGB
+ */
+ private $backgroundColor = array(
+ 'red' => "",
+ 'green' => "",
+ 'blue' => ""
+ );
+
+ /**
+ * Foreground color in RGB
+ */
+ private $foregroundColor = array(
+ 'red' => "",
+ 'green' => "",
+ 'blue' => ""
+ );
+
+ /**
+ * Current choosen color array
+ */
+ private $colorMode = "";
+
+ /**
+ * Image resource
+ */
+ private $imageResource = null;
+
+ /**
+ * Image name
+ */
+ private $imageName = "";
+
+ /**
+ * String name
+ */
+ private $stringName = "";
+
+ /**
+ * Groupable image strings?
+ */
+ private $groupable = "single";
+
+ /**
+ * Protected constructor
+ *
+ * @param $className Name of the class
+ * @return void
+ */
+ protected function __construct ($className) {
+ // Call parent constructor
+ parent::__construct($className);
+
+ // Clean up a little
+ $this->removeNumberFormaters();
+ $this->removeSystemArray();
+ }
+
+ /**
+ * Private setter for all colors
+ *
+ * @param $colorMode Wether background or foreground color
+ * @param $colorChannel Red, green or blue channel?
+ * @param $colorValue Value to set
+ */
+ private final function setColor ($colorMode, $colorChannel, $colorValue) {
+ // Construct the eval() command
+ $eval = sprintf("\$this->%s['%s'] = \"%s\";",
+ $colorMode,
+ $colorChannel,
+ $colorValue
+ );
+
+ // Run the command
+ //* DEBUG: */ echo "mode={$colorMode}, channel={$colorChannel}, value={$colorValue}<br />\n";
+ eval($eval);
+ }
+
+ /**
+ * Setter for image width
+ *
+ * @param $width Width of the image
+ * @return void
+ */
+ public final function setWidth ($width) {
+ $this->width = $width;
+ }
+
+ /**
+ * Getter for image width
+ *
+ * @return $width Width of the image
+ */
+ public final function getWidth () {
+ return $this->width;
+ }
+
+ /**
+ * Setter for image height
+ *
+ * @param $height Height of the image
+ * @return void
+ */
+ public final function setHeight ($height) {
+ $this->height = $height;
+ }
+
+ /**
+ * Getter for image height
+ *
+ * @return $height Height of the image
+ */
+ public final function getHeight () {
+ return $this->height;
+ }
+
+ /**
+ * Finish the type handling (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishType () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Prepares the class for resolution (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function initResolution () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Finish resolution handling (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishResolution () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Prepares the class for base (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function initBase () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Finish base handling (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishBase () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Prepares the class for background color
+ *
+ * @return void
+ */
+ public function initBackgroundColor () {
+ $this->colorMode = "backgroundColor";
+ }
+
+ /**
+ * Finish background color handling
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishBackgroundColor () {
+ // Empty at the moment
+ }
+
+ /**
+ * Prepares the class for foreground color
+ *
+ * @return void
+ */
+ public function initForegroundColor () {
+ $this->colorMode = "foregroundColor";
+ }
+
+ /**
+ * Finish foreground color handling
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishForegroundColor () {
+ // Empty at the moment
+ }
+
+ /**
+ * Prepares the class for string (unused at the moment)
+ *
+ * @param $groupable Wether this image string is groupable or single
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function initImageString ($groupable = "single") {
+ $this->groupable = $groupable;
+ }
+
+ /**
+ * Finish string handling (unused at the moment)
+ *
+ * @return void
+ * @todo Find something usefull for this method.
+ */
+ public function finishImageString () {
+ // Empty at the momemt
+ }
+
+ /**
+ * Setter for red color
+ *
+ * @param $red Red color value
+ * @return void
+ */
+ public final function setRed ($red) {
+ // Get array name
+ $arrayName = $this->colorMode;
+
+ // Set image color
+ $this->setColor($arrayName, 'red', $red);
+ }
+
+ /**
+ * Setter for green color
+ *
+ * @param $green Green color value
+ * @return void
+ */
+ public final function setGreen ($green) {
+ // Get array name
+ $arrayName = $this->colorMode;
+
+ // Set image color
+ $this->setColor($arrayName, 'green', $green);
+ }
+
+ /**
+ * Setter for blue color
+ *
+ * @param $blue Blue color value
+ * @return void
+ */
+ public final function setBlue ($blue) {
+ // Get array name
+ $arrayName = $this->colorMode;
+
+ // Set image color
+ $this->setColor($arrayName, 'blue', $blue);
+ }
+
+ /**
+ * Setter for image string
+ *
+ * @param $string String to set in image
+ * @return void
+ */
+ public final function setString ($string) {
+ $this->imageString = (string) $string;
+ }
+
+ /**
+ * Getter for image string
+ *
+ * @return $string String to set in image
+ */
+ public final function getString () {
+ return $this->imageString;
+ }
+
+ /**
+ * Setter for image type
+ *
+ * @param $imageType Type to set in image
+ * @return void
+ */
+ protected final function setImageType ($imageType) {
+ $this->imageType = (string) $imageType;
+ }
+
+ /**
+ * Getter for image type
+ *
+ * @return $imageType Type to set in image
+ */
+ public final function getImageType () {
+ return $this->imageType;
+ }
+
+ /**
+ * Setter for image name
+ *
+ * @param $name Name of the image
+ * @return void
+ */
+ public final function setImageName ($name) {
+ $this->imageName = (string) $name;
+ }
+
+ /**
+ * Getter for image name
+ *
+ * @return $name Name of the image
+ */
+ public final function getImageName () {
+ return $this->imageName;
+ }
+
+ /**
+ * Getter for image resource
+ *
+ * @return $imageResource An image resource from imagecreatetruecolor() function
+ */
+ public final function getImageResource() {
+ return $this->imageResource;
+ }
+
+ /**
+ * Setter for X coordinate
+ *
+ * @param $x X coordinate
+ * @return void
+ */
+ public final function setX ($x) {
+ $this->x = $x;
+ }
+
+ /**
+ * Getter for X coordinate
+ *
+ * @return $x X coordinate
+ */
+ public final function getX () {
+ return $this->x;
+ }
+
+ /**
+ * Setter for Y coordinate
+ *
+ * @param $y Y coordinate
+ * @return void
+ */
+ public final function setY ($y) {
+ $this->y = $y;
+ }
+
+ /**
+ * Getter for Y coordinate
+ *
+ * @return $y Y coordinate
+ */
+ public final function getY () {
+ return $this->y;
+ }
+
+ /**
+ * Setter for font size
+ *
+ * @param $fontSize Font size for strings
+ * @return void
+ */
+ public final function setFontSize ($fontSize) {
+ $this->fontSize = $fontSize;
+ }
+
+ /**
+ * Getter for font size
+ *
+ * @return $fontSize Font size for strings
+ */
+ public final function getFontSize () {
+ return $this->fontSize;
+ }
+
+ /**
+ * Setter for string name
+ *
+ * @param $stringName String name to set
+ * @return void
+ */
+ public final function setStringName($stringName) {
+ $this->stringName = $stringName;
+ }
+
+ /**
+ * Finish this image by producing it
+ *
+ * @return void
+ */
+ public function finishImage () {
+ // Get template instance
+ $templateInstance = $this->getTemplateInstance();
+
+ // Compile width and height
+ $width = $templateInstance->compileRawCode($this->getWidth());
+ $height = $templateInstance->compileRawCode($this->getHeight());
+
+ // Set both again
+ $this->setWidth($width);
+ $this->setHeight($height);
+
+ // Get a image resource
+ $this->imageResource = imagecreatetruecolor($width, $height);
+
+ // Compile background colors
+ $red = $templateInstance->compileRawCode($this->backgroundColor['red']);
+ $green = $templateInstance->compileRawCode($this->backgroundColor['green']);
+ $blue = $templateInstance->compileRawCode($this->backgroundColor['blue']);
+
+ // Set all back
+ $this->initBackgroundColor();
+ $this->setRed($red);
+ $this->setGreen($green);
+ $this->setBlue($blue);
+
+ // Get a pointer for background color
+ $backColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+
+ // Fill the image
+ imagefill($this->imageResource, 0, 0, $backColor);
+
+ // Compile foreground colors
+ $red = $templateInstance->compileRawCode($this->foregroundColor['red']);
+ $green = $templateInstance->compileRawCode($this->foregroundColor['green']);
+ $blue = $templateInstance->compileRawCode($this->foregroundColor['blue']);
+
+ // Set all fore
+ $this->initForegroundColor();
+ $this->setRed($red);
+ $this->setGreen($green);
+ $this->setBlue($blue);
+
+ // Get a pointer for foreground color
+ $foreColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+
+ switch ($this->groupable) {
+ case "single": // Single image string
+ // Compile image string
+ $imageString = $templateInstance->compileRawCode($this->getString());
+
+ // Set it back
+ $this->setString($imageString);
+
+ // Compile X/Y coordinates and font size
+ $x = $templateInstance->compileRawCode($this->getX());
+ $y = $templateInstance->compileRawCode($this->getY());
+ $size = $templateInstance->compileRawCode($this->getFontSize());
+
+ // Set the image string
+ imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+ break;
+
+ case "groupable": // More than one string allowed
+ // Walk through all groups
+ foreach ($templateInstance->getVariableGroups() as $group => $set) {
+ // Set the group
+ $templateInstance->setVariableGroup($group, false);
+
+ // Compile image string
+ $imageString = $templateInstance->compileRawCode($this->getString());
+
+ // Compile X/Y coordinates and font size
+ $x = $templateInstance->compileRawCode($this->getX());
+ $y = $templateInstance->compileRawCode($this->getY());
+ $size = $templateInstance->compileRawCode($this->getFontSize());
+
+ // Set the image string
+ //* DEBUG: */ echo __METHOD__.": size={$size}, x={$x}, y={$y}, string={$imageString}<br />\n";
+ imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+ } // END - foreach
+ break;
+ }
+
+ // You need finishing in your image class!
+ }
+
+ /**
+ * Getter for full created image content
+ *
+ * @return $imageContent The raw image content
+ */
+ public function getContent () {
+ // Get cache file name
+ $cacheFile = $this->getTemplateInstance()->getImageCacheFqfn();
+
+ // Load the content
+ $imageContent = file_get_contents($cacheFile);
+
+ // And return it
+ return $imageContent;
+ }
+}
+// [EOF]
+?>