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
imagesetstyle()
impostare stili per disegnare


e-book
cartaceo

Per impostare uno stile per il disegno occorre usare una delle costanti predefinite (conosciute anche come "costanti per colore speciale"), ad esempio MG_COLOR_STYLED.
Questa opzione di "colore speciale" può essere utilizzata impiegando in modo avanzato colori  o immagini che solitamente sono allocati con le funzioni imagecolorallocate () o imagecolorallocatealpha ()
L'idea di base è quella di impostare un modello per lo stile delle figure che verranno disegnate.
Possono essere disegnate tutte le figure ammesse, linee, archi rettangoli ecc.
Nel caso venga disegnato con imagesetpixel(), cioè un singolo pixel, non ci saranno errori, ma sarà disegnato 1 solo pixel corrispondente al primo colore dell'array che definisce la figura.
Nel caso di figure chiuse, lo stile riempie queste figure.
In questa circostanza rivestono molta importanza le dimensioni dell'array dei colori e quello delle figure riempite perché il disegno del riempimento risultante varia a seconda della quantità degli indici dell'array in rapporto alle dimensioni dell'immagine. (vedi esempi style2, style3, style4 e style6, style7)
 
Questi sono i passi da compiere per settare all'uso la costante IMG_COLOR_STYLED:
Allocare i colori che si desidera, ad es.
$Rosso = imagecolorallocate($Immagine, 255, 0, 0); // alloca il colore rosso
$Blu = imagecolorallocate($Immagine, 0, 0, 255); // alloca il colore blu
Assegnare i colori come array alla variabile $stile (ma può avere qualsiasi altro nome consentito)
$style = array($Rosso, $Rosso , $Rosso , $Blu, $Blu, $Blu);
L'array $style va poi assegnato all'immagine con: 
imagesetstyle($Immagine, $style);
In questo modo viene impostato un pennello (in questo esempio di 6 pixel,  3 rossi e 3 blu).
In altre parole, ogni nome/colore è 1 pixel che verrà disegnato con quel colore.
La costante MG_COLOR_TRANSPARENT può essere usata per definire un pixel/colore trasparente. 
Ad es. $style = array($Rosso,  MG_COLOR_TRANSPARENT , $Blu, MG_COLOR_TRANSPARENT);
creando un pennello dove pixel trasparenti sono fra i rossi e i blu. 
Questo è importante perché quel punto non verrà disegnato e quindi risulterà trasparente indipendentemente dal colore o immagine sottostante.
La funzione imagesetthickness() che detrmina la larghezza del tratto può essere utilizzata.
imagesetstyle ( resource $image , array $style )
Parametri 
$image: Una risorsa immagine restituita da una delle funzioni di creazione immagine.
$style: Una gamma di colori per i pixel da colorare. 
È possibile utilizzare la costante IMG_COLOR_TRANSPARENT per aggiungere pixel trasparenti.


<?php
$Immagine = imagecreatetruecolor(800,330); // crea l'immagine
//alloca i colori
$Bianco = imagecolorallocate($Immagine, 255,255,255);
$Verde = imagecolorallocate($Immagine, 0,255,0);
$Rosso = imagecolorallocate($Immagine, 255, 0, 0);
$Blu = imagecolorallocate($Immagine, 0, 0, 255);
$Nero = imagecolorallocate($Immagine, 0, 0, 0);
imagefill($Immagine,0,0, $Bianco); // sfondo bianco


// style 1
//Questo esempio disegna 1 linea orizzontale verde e rossa
// Ogni segmento di colore alternato è di 5 pixel.
$style1 = array($Verde, $Verde, $Verde,$Verde, $Verde, $Rosso, $Rosso, $Rosso, $Rosso, $Rosso);
imagesetstyle($Immagine, $style1);
imagesetthickness($Immagine, 3); // spessore linea
imageline($Immagine, 10, 10, 200, 10, IMG_COLOR_STYLED);// disegna linea


// style 2
//Questo esempio disegna 1 linea orizzontale rossa e trasparente
// Ogni segmento di colore alternato è di 5 pixel.
$style2 = array(
$Rosso, $Rosso, $Rosso, $Rosso, $Rosso,
IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT
);
imagesetstyle($Immagine, $style2);
imageline($Immagine, 10, 20, 200, 20, IMG_COLOR_STYLED);// disegna segmento
// disegna rettangolo con interno non colorato style2
imagerectangle($Immagine, 10, 30, 200, 200, IMG_COLOR_STYLED);// disegna rettangolo
// disegna rettangolo con interno usando style2
imagefilledrectangle($Immagine, 210, 30, 400, 200, IMG_COLOR_STYLED);// disegna rettangolo


// style 3
$style3 = array($Rosso,IMG_COLOR_TRANSPARENT);
imagesetstyle($Immagine, $style3);
imagefilledrectangle($Immagine, 410, 30, 600, 200, IMG_COLOR_STYLED);// disegna rettangolo


// style 4
$style4 = array(
$Rosso, $Rosso, $Rosso, $Rosso, $Rosso, 
IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT);
imagesetstyle($Immagine, $style4);
imagefilledrectangle($Immagine, 610, 30, 800, 200, IMG_COLOR_STYLED);


// style 5
$style5 = array(
$Rosso, $Rosso, $Rosso, $Rosso, $Rosso, 
$Blu, $Blu, $Blu, $Blu, $Blu);
imagesetstyle($Immagine, $style5);
for($x=0;$x<9;$x++)// 9 ellissi vuote spessore linea 1*9
{imageellipse($Immagine, 100, 270, 190+$x, 90+$x, IMG_COLOR_STYLED);} 
imagefill($Immagine, 100, 270, $Verde);
for($x=0;$x<9;$x++)// 9 ellissi vuote spessore linea 1*9
{imageellipse($Immagine, 300, 270, 190+$x, 90+$x, IMG_COLOR_STYLED);} 
imagefill($Immagine, 300, 270, IMG_COLOR_STYLED);
imagesetthickness($Immagine, 11);// definisce 5 pixel la larghezza della line


// Linea tratteggiata
$style6 = array(
$Rosso, $Rosso, $Rosso, $Rosso, $Rosso, 
IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT 
);
imagesetstyle($Immagine, $style6);// Imposta stile del tratteggio
imagerectangle($Immagine, 470,230,550,300, IMG_COLOR_STYLED);  


// Linea tratteggiata
$style7 = array(
$Rosso, $Rosso, 
IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT 
);
imagesetstyle($Immagine, $style7);// Imposta stile del tratteggio
imagerectangle($Immagine, 650,230,730,300, IMG_COLOR_STYLED);


header('Content-type: image/png');
imagepng($Immagine); // al prowser
imagepng($Immagine,"MomeFile.png"); // salva
imagedestroy($Immagine);
?> Risultato: