Utilizzo di cookies
Script GD libray con PHP Modelli Creare immagine Colore e trasparenza Disegnare Pennelli Misurare Filtri Testo Copy Salvare Miscellanea
GD library con PHP
Gradiente lineare
gradiente a 2 colori per i 3 canali


e-book
cartaceo
Colore A: Colore B:
Cambiare i valori e premere
gradiente lineare Nello scrit viene creato un gradiente lineare fra due colori.La scelta è fra 6 colori, ma l'esempio è adattabile a tutta la gamma truecolor.Con $_POST è simulata l'acquisizione dei dati, poi dichiarati gli array  $ColNUM e $ColTXT che contengono rispettivamente i valori esadecimali dei colori ed i loro nomi.La preparazione al gradiente viene svolta nella funzione CanaliStartEnd().La funzione CanaliStartEnd() è invocata due volte passandole prima il colore di inizio gradente e poi il coore finale. Ritornano, rispettivamente, i valori decimali di ciascun canale per i due estremi del gradiente.Viene poi calcolato l'incremento di ciascun canale colore in relazione allo spazio da disegnare (in questo caso orizzontale) inserendolo nell'array $rgbINCREMENTO.Questo valore è diverso per ciascun canale e proporzionale alla superfice da coprire.Viene poi lanciato un loop sull'immagine per la parte da colorare.Ad ogni ciclo, ciascun canale colore viane incrementato del valore di $rgbINCREMENTO ed il colore continuamente allocato degradando dolcemente fra gli estremi richiesti.


<?php
$ColoreA = isset($_POST['ColoreA']) ? $_POST['ColoreA'] : 2; 
$ColoreB = isset($_POST['ColoreB']) ? $_POST['ColoreB'] : 0; 


$ColHEX = array(); $ColTXT = array(); // colori e loro nomi
$ColHEX[0] = "FF0000"; $ColTXT[0] = "Rosso"; $ColHEX[1] = "00FF00"; $ColTXT[1] = "Verde";
$ColHEX[2] = "0000FF"; $ColTXT[2] = "Blu"; $ColHEX[3] = "FFFF00"; $ColTXT[3] = "Giallo";
$ColHEX[4] = "FF00FF"; $ColTXT[4] = "Viola"; $ColHEX[5] = "00FFFF"; $ColTXT[5] = "Azzurro";


$Larghezza = 700; $Altezza = 200;// dimensioni immagine
$Immagine = imagecreatetruecolor($Larghezza, $Altezza); // crea immagine

function CanaliStartEnd($ColHEX,$Colore){// valore decimale canali
$rgb = array();
$rgb[0] = hexdec(substr($ColHEX[$Colore],0,2));  // rosso;
$rgb[1] = hexdec(substr($ColHEX[$Colore],2,2)); // verde
$rgb[2] = hexdec(substr($ColHEX[$Colore],4,2)); // blu
return $rgb; // ritorna quantità colore di pertenza per ognuno dei 3 canali
}

$Colore = $ColoreA;
$rgbSTART = CanaliStartEnd($ColHEX,$Colore);

//echo "<br>".$rgbSTART[0]." | ".$rgbSTART[1]." | ".$rgbSTART[2];// valori decimali iniziali canali colore
$Colore = $ColoreB;
$rgbEND = CanaliStartEnd($ColHEX,$Colore);

//echo "<br>".$rgbEND[0]." | ".$rgbEND[1]." | ".$rgbEND[2];// valori decimali finali canali colore
$rgbINCREMENTO = array();
for($i = 0; $i<3; $i++)
{
$rgbINCREMENTO[$i] = ($rgbEND[$i]-$rgbSTART[$i]) / $Larghezza; // incremento valore per ciascun colore
}

//echo "<br>".$rgbINCREMENTO[0]." | ".$rgbINCREMENTO[1]." | ".$rgbINCREMENTO[2];
// incremento di ciascun canale colore
for($x=0; $x<$Larghezza; $x++){// loop sull'immagine
$Colore = imagecolorallocate($Immagine, $rgbSTART[0],$rgbSTART[1],$rgbSTART[2]); // alloca il colore
imageline($Immagine,$x,0,$x,($Altezza), $Colore); // linea verticale

// incrementa valori dei canali canali
$rgbSTART[0] = $rgbSTART[0] + $rgbINCREMENTO[0]; // rosso
$rgbSTART[1] = $rgbSTART[1] + $rgbINCREMENTO[1]; // verde
$rgbSTART[2] = $rgbSTART[2] + $rgbINCREMENTO[2]; // blu
}

header('Content-Type: image/png');
imagepng($Immagine,"NomeFile.png"); // salva
imagepng($Immagine); // al browser
imagedestroy($Immagine); // libera memoria