libreqr/barcode-generator/Generator/CINColor.php

157 lines
4.4 KiB
PHP

<?php
/**
*--------------------------------------------------------------------
*
* Holds Color in RGB Format.
*
*--------------------------------------------------------------------
* @author Akhtar Khan <er.akhtarkhan@gmail.com>
* @link http://www.codeitnow.in
* @package https://github.com/codeitnowin/barcode-generator
*/
namespace CodeItNow\BarcodeBundle\Generator;
class CINColor {
protected $r, $g, $b; // int Hexadecimal Value
protected $transparent;
/**
* Save RGB value into the classes.
*
* There are 4 way to associate color with this classes :
* 1. Gives 3 parameters int (R, G, B)
* 2. Gives 1 parameter string hex value (#ff0000) (preceding with #)
* 3. Gives 1 parameter int hex value (0xff0000)
* 4. Gives 1 parameter string color code (white, black, orange...)
*
* @param mixed ...
*/
public function __construct() {
$args = func_get_args();
$c = count($args);
if ($c === 3) {
$this->r = intval($args[0]);
$this->g = intval($args[1]);
$this->b = intval($args[2]);
} elseif ($c === 1) {
if (is_string($args[0]) && strlen($args[0]) === 7 && $args[0][0] === '#') { // Hex Value in String
$this->r = intval(substr($args[0], 1, 2), 16);
$this->g = intval(substr($args[0], 3, 2), 16);
$this->b = intval(substr($args[0], 5, 2), 16);
} else {
if (is_string($args[0])) {
$args[0] = self::getColor($args[0]);
}
$args[0] = intval($args[0]);
$this->r = ($args[0] & 0xff0000) >> 16;
$this->g = ($args[0] & 0x00ff00) >> 8;
$this->b = ($args[0] & 0x0000ff);
}
} else {
$this->r = $this->g = $this->b = 0;
}
}
/**
* Sets the color transparent.
*
* @param bool $transparent
*/
public function setTransparent($transparent) {
$this->transparent = $transparent;
}
/**
* Returns Red Color.
*
* @return int
*/
public function r() {
return $this->r;
}
/**
* Returns Green Color.
*
* @return int
*/
public function g() {
return $this->g;
}
/**
* Returns Blue Color.
*
* @return int
*/
public function b() {
return $this->b;
}
/**
* Returns the int value for PHP color.
*
* @param resource $im
* @return int
*/
public function allocate(&$im) {
$allocated = imagecolorallocate($im, $this->r, $this->g, $this->b);
if ($this->transparent) {
return imagecolortransparent($im, $allocated);
} else {
return $allocated;
}
}
/**
* Returns class of CINColor depending of the string color.
*
* If the color doens't exist, it takes the default one.
*
* @param string $code
* @param string $default
*/
public static function getColor($code, $default = 'white') {
switch(strtolower($code)) {
case '':
case 'white':
return 0xffffff;
case 'black':
return 0x000000;
case 'maroon':
return 0x800000;
case 'red':
return 0xff0000;
case 'orange':
return 0xffa500;
case 'yellow':
return 0xffff00;
case 'olive':
return 0x808000;
case 'purple':
return 0x800080;
case 'fuchsia':
return 0xff00ff;
case 'lime':
return 0x00ff00;
case 'green':
return 0x008000;
case 'navy':
return 0x000080;
case 'blue':
return 0x0000ff;
case 'aqua':
return 0x00ffff;
case 'teal':
return 0x008080;
case 'silver':
return 0xc0c0c0;
case 'gray':
return 0x808080;
default:
return self::getColor($default, 'white');
}
}
}
?>