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
Grafico con prodotti e loghi
Consumo di birra


e-book
cartaceo
Cambiare i valori e premere
Grafico 3d consumo birra
Spesso capita di vedere un grafico dove è disegnata la merce che è misurata, un classico sono i barili di petrolio per un grafico sulla produzione o il consumo di greggio.
Il prossimo grafico rappresenta un ipotetico consumo di birra per 4 nazioni europee  (tabella successiva).


Nazione  Italia   Francia Spagna Germania
Consumo   425              500       232        1000


La dimensione del consumo è mostrata dalla grandezza dei bicchieri ricolmi, grandezza proporzionale al valore attribuito di consumo.
Sotto ogni bicchiere la quantità  di consumo e sotto un'immagine stilizzata della nazione. 
Le immagini delle nazioni ed il boccale sono letti da disco.


In base ai valori del consumo e la distanza che dovranno avere fra loro i bicchieri, viene creata l'immagine che conterrà il grafico in scala 1/2.
Vendono poi disegnati gli assi x,y con la scala dei valori ed il titolo del grafico.
Con un loop sono analizzati i 4 valori, calcolate le dimensioni dei bicchieri  e con imagecopyresampled() incollato il bicchiere della dimensione e nel punto della nazione corrente.
Sempre nello stesso loop viene disegnato il valore numerico sul rispettivo bicchiere e sotto copiata l'immagine della nazione. 


<?php 
$Nazioni = array();// legge file immagini delle nazioni
$Nazioni[0] = imagecreatefrompng("immagini/Italia.png");
$Nazioni[1] = imagecreatefrompng("immagini/Francia.png");
$Nazioni[2] = imagecreatefrompng("immagini/Spagna.png");
$Nazioni[3] = imagecreatefrompng("immagini/Germania.png");


// legge file immagini bicchiere di birra
$BicchiereBirra = imagecreatefrompng("immagini/BicchiereBirra.png");
$BBx = imagesx($BicchiereBirra); $BBy = imagesy($BicchiereBirra); // dimensioni boccale birra
$NazConsumo = array(425, 500, 232, 1000); // consumo per nazione
$Legenda = 80; // contiene le immagini delle nazioni
$SpazioAsseY = 50; // // spazio alla sinistra dell'asse Y
$ScalaGrafico = .5; // scala grafico 1/2
$Max = max($NazConsumo); // valore massimo di consumo/nazione
$SpazioFraBicchieri = 30;


// calcola le dimensioni necessarie per il grafico
$DimOrizzBicchieri = array(); 
$DimOrizzGrafico = 0;
for($z=0; $z<4;$z++){


// calcola dimensione boccale in larghezza moltiplicando l'altezza  per rapporto aureo 0.618
$DimOrizzBicchieri[$z] = $NazConsumo[$z] * 0.618; // echo "<br>".$DimOrizzBicchieri[$z];


// somma spazio fra bicchieri più dimensione bicchiere in orizzontale per ogni nazione
// per determinare larghezza del grafico da creare
$DimOrizzGrafico = $DimOrizzGrafico + $DimOrizzBicchieri[$z] + $SpazioFraBicchieri;
}


// dimensioni del grafico
$Larghezza = $DimOrizzGrafico * $ScalaGrafico + $SpazioAsseY + $SpazioFraBicchieri*2;
$Altezza = $Max * $ScalaGrafico + $Legenda; // valore massimo più spazio legenda
$Immagine = imagecreatetruecolor($Larghezza, $Altezza);//crea l'immagine che conterrà il grafico


 // imposta trasparenza del fondo dell'immagine
imagealphablending($Immagine, false);// Spenge alpha blending
imagesavealpha($Immagine, true); // imposta il flag per salvare informazioni con canale Alpha
$CanaleAlpha = imagecolorallocatealpha($Immagine, 0, 0, 0, 127);
imagefill($Immagine, 0, 0, $CanaleAlpha); // rende l'immagine completamente trasparente


$Nero = imagecolorallocate($Immagine,0,0,0); // alloca colore nero per testo e assi x,y


// titolo del grafico 
imagestring ($Immagine,5 , $Larghezza/5 , 40  , "Consumo Birra" , $Nero );


// disegna coordinate x,y
imageline($Immagine,0,$Altezza - $Legenda , $Larghezza , $Altezza - $Legenda ,$Nero);
imageline($Immagine,$SpazioAsseY, 0 , $SpazioAsseY , $Altezza ,$Nero);


// valori e linee x
for($z= 100; $z < 401; $z+=100){
imageline($Immagine, 0 ,($Altezza - $Legenda) - $z , $Larghezza , ($Altezza - $Legenda) - $z,$Nero);
imagestring ($Immagine,5 , 5 , $z  , (($Altezza - $z) - $Legenda) *2 , $Nero );
}


// copia il bicchiere all'interno del grafico
// dimensionandolo in modo proporzionale al consumo della nazione
$PosizioneX = $SpazioAsseY + $SpazioFraBicchieri;
for($z=0; $z < 4; $z++){
$PosizioneY = $Altezza - ($Legenda + $NazConsumo[$z] * $ScalaGrafico);
imagecopyresampled($Immagine,$BicchiereBirra,
$PosizioneX, $PosizioneY , // x,y destinazione
0,0, // x,y sorgente
$DimOrizzBicchieri[$z] * $ScalaGrafico, $NazConsumo[$z] * $ScalaGrafico, // largh./alt. destinazione
$BBx,$BBy // larghezza e altezza sorgente 
);


// copia immagine della nazione
$NazX = $PosizioneX + ($DimOrizzBicchieri[$z] * $ScalaGrafico *.25); 
$NazY = $Altezza -($Legenda - 5);
imagecopyresampled($Immagine,$Nazioni[$z],
$NazX, $NazY, // x,y destinazione
0,0, // x,y sorgente
60, 60, // larghezza e altezza destinazione
60,60 // larghezza e altezza sorgente 
);


// incrementa la posizione x per determinare il punto di copia del boccale successivo
$PosizioneX = $PosizioneX + $SpazioFraBicchieri + $DimOrizzBicchieri[$z]* $ScalaGrafico;


// testo del consumo disegnato sul boccale
imagestring($Immagine,5,$NazX,$NazY-$DimOrizzBicchieri[$z]*$ScalaGrafico,$NazConsumo[$z],$Nero );
}


imagepng($Immagine); // al browser
imagepng($Immagine,"es_103_Consumo_Birra.png"); // salva
imagedestroy($Immagine); // libera memoria
?>