PHP alloca il colore senza risorsa image

È ansible assegnare un colore in PHP GD senza una image resource ? Dovrebbe essere ansible perché in realtà un colore assegnato è un numero, giusto?

 $im = imagecreatetruecolor(100, 100); $col = imagecolorallocate($im, 255, 0, 0); print $col."<br/>"; $col2 = imagecolorallocate($im, 255, 0, 0); print $col2."<br/>"; $im2 = imagecreatetruecolor(600, 100); $col3 = imagecolorallocate($im, 255, 0, 0); print $col3; 

Questo printing:

16711680

16711680

16711680

Immagino quale sia la vera domanda su come 255, 0 e 0 sono fatti in 16711680.

16711680 (decimale) è 0x00FF0000 (esadecimale)

00 – Valore alfa (0 dec)

FF – Rosso (255 dec)

00 – Verde (0 dec)

00 – Blu (0 dec)

Vedere http://www.php.net/manual/en/function.imagecolorallocatealpha.php per impostare il byte alfa

Modificare:

Inoltre, per rispondere alla tua prima domanda – , puoi creare un colore senza una risorsa image (e, di conseguenza, senza una chiamata a imagecolorallocate):

$ col1 = 0x00FF0000; // rosso

$ col2 = 0x0000FF00; // Verde

// eccetera…

Dovrebbe essere ansible perché in realtà un colore assegnato è un numero, giusto?

No non lo è. GD potrebbe anche wherer registrare quel colore nella tavolozza dell'image (pensa a immagini a colors non vere).

Quindi hai bisogno di una risorsa image.

Usa questa function

 function img_color($r, $g, $b, $a=0) { // prepare red color if (is_string($r)) { if (!preg_match('/^[a-f0-9]{1,2}$/i', $r)) return false; $r = hexdec($r); } elseif (is_int($r)) {if ($r<0 or $r>255) return false;} else return false; // prepare green color if (is_string($g)) { if (!preg_match('/^[a-f0-9]{1,2}$/i', $g)) return false; $g = hexdec($g); } elseif (is_int($g)) {if ($g<0 or $g>255) return false;} else return false; // prepare blue color if (is_string($b)) { if (!preg_match('/^[a-f0-9]{1,2}$/i', $b)) return false; $b = hexdec($b); } elseif (is_int($b)) {if ($b<0 or $b>255) return false;} else return false; // prepare alpha channel if (is_string($a)) { if (!preg_match('/^[a-f0-9]{1,2}$/i', $a)) return false; $a = hexdec($a); } elseif (!is_int($a)) return false; if ($a<0 or $a>127) return false; $result = unpack('I', chr($b) . chr($g) . chr($r) . chr($a)); return $result[1]; }