Problem mit hexToRgb-Methode

B

Bgag

Guten Abend!
Ich bin gerade dabei eine kleine Klasse zu scripten, diemir ein Diagramm via PHP ausgibt. Damit möchte ich dann später meine Counterstatistiken übersichtlicher und vorallem ansehnlicher gestalten. Soweit alles ok. Jedoch habe ich in dieser Klasse auch eine Methode hexToRgb gecoded, die Hex-Farbcode in RGB umrechnen soll und das ergebnis durch Kommas trennt, sodass dieser von den imagefunktionen von PHP genutzt werden kann. Funktioniert alles wunderbar, jedoch wenn ich nun inerhalb der Klasse diese Methode aufrufe um verschiedene Farben festzulegen, wirft er mir folgenden Fehler aus:
Code:
Warning: Wrong parameter count for imagecolorallocate() in /home/www/web193/html/ChartCreator.php on line 159
Wenn ich mir den Aufruf der hexToRgb-Methode ausgeben lasse, wenn ich ihr #FFFFFF übergeben habe erhalte ich:
Code:
255, 255, 255
Die Methode hexToRgb:
PHP:
	/**
	* Converts hexacode to rgbcode
	* 
	* @name ChartCreator::hexToRgb()
	* @access public
	* @param String $hex
	* @return boolean
	*/
	public function hexToRgb($hex)
	{
		trim($hex);
		$hex = str_replace('#','', $hex);
		
		if (strlen($hex) == 6)
		{
			$return['r'] = hexdec(substr($hex, 0, 2));
			$return['g'] = hexdec(substr($hex, 2, 2));
			$return['b'] = hexdec(substr($hex, 4, 2));
			$return = strtoupper(implode(", ", $return));
		}
		
		else if (strlen($hex) == 3)
		{
			$return['r'] = hexdec(substr($hex, 0, 1));
			$return['g'] = hexdec(substr($hex, 1, 1));
			$return['b'] = hexdec(substr($hex, 2, 1));
			$return = strtoupper(implode(", ", $return));
		}
		
		else
		{
			$return = false;
		}
			
		return $return;	
	}
Der Aufruf in der Klasse:
PHP:
	/**
	* Creates the image for the chart and the different colors
	* the background of the image is filled
	* 
	* @name ChartCreator::createImage()
	* @access public
	* @return boolean
	*/
	public function createImage()
	{
		$this->image = imagecreatetruecolor($this->width, $this->height);
                $this->dataBgColor = '#ffffff';

		$this->bgColor = imagecolorallocate($this->image, 123, 2, 32); // funktioniert
		$this->dataBgColor = imagecolorallocate($this->image, $this->hexToRgb($this->dataBgColor)); // funktioniert nicht!
		return true;
	}
Ich wäre euch für eure Hilfe sehr dankbar bin grad so leicht am verzweifeln.
MfG, Andy
 
Die Funktion [phpf]imagecolorallocate[/phpf] erwartet vier Parameter, du jedoch übergibst nur zwei - Des Weiteren sollten Parameter 2, 3 und 4 vom Typ Integer sein.

Alternativ bietet sich die Verwendung von Bitoperatoren an um von einer ganzen Zahl (hexadezimale Schreibweise in PHP via 0x0123456789abcdef), zB 0xFFFFFF in diverse Komponenten zu unterteilen. (Beispiel aus einem Benutzerkommentar @ php.net)
PHP:
function ImageColorAllocateFromHex ($img, $hexstr)
{
  $int = hexdec($hexstr);

  return ImageColorAllocate ($img,
         0xFF & ($int >> 0x10),
         0xFF & ($int >> 0x8),
         0xFF & $int);
}

Des Weiteren sehe ich gerade einen interessanten, jedoch auch ineffizienten Weg in der PHP-Doku:
PHP:
$color = 'FF9900';
$color = imagecolorallocate($im, hexdec('0x' . $color{0} . $color{1}), hexdec('0x' . $color{2} . $color{3}), hexdec('0x' . $color{4} . $color{5}));

Deinen ursprünglichen Ansatz könntest du beibehalten, wenn du das Array nicht in einem String zusammenfügst, via [phpf]call_user_func_array[/phpf].
 
Zurück