Con GD per utilizzare la trasparenza Alpha è essenziale usare la funzione
imagecreatetruecolor() per creare immagini oppure caricare immagini esistenti che abbiano le stesse qualità.
Le immagini TrueColor possono anche essere JPG/JPEG, ma a differenza del formato PNG, queste non supportano la trasparenza completa ma solo diversi gradi di opacità.
La funzione
imagecolorallocatealpha() dispone di 4 canali, i tre colori RGB e il valore del canale Alpha per la trasparenza.
L'esempio seguente crea immagini TrueColor identiche, poi le passa agli stessi parametri con la componente Alpha, qunidi le salva nei formati JPG e PNG mostrando la differenza di risultato.
<?php
// crea tre immagini true color
for($x=1;$x<4;$x++){$Immagine[$x] =
imagecreatetruecolor(220,120); }
// gradi di opacità sfondo immagini
$Opacita[1] = 0; $Opacita[2] = 100; $Opacita[3] = 127;
for($x=1;$x<4;$x++) // imposta gradi di opacità sul colore verde per ciascuna immagine
{
imagesavealpha($Immagine[$x], true); // imposta il flag per salvare informazioni con canale Alpha
$CanaleAlpha =
imagecolorallocatealpha($Immagine[$x], 0, 255, 0, $Opacita[$x]);
imagefill($Immagine[$x], 0, 0, $CanaleAlpha); // se PNG rende l'immagine completamente trasparente
}
// alloca il rosso con tre diversi gradi di opacità
$Rosso1 =
imagecolorallocatealpha($Immagine[1],255,0,0,0); // alpha = 0
$Rosso2 =
imagecolorallocatealpha($Immagine[1],255,0,0,64); // alpha = 64
$Rosso3 =
imagecolorallocatealpha($Immagine[1],255,0,0,110); // alpha = 110
// crea 3 circonferenze con rosso di diversa opacità
for($x=1;$x<4;$x++)
{
imagefilledellipse($Immagine[$x],40,35,60,60,$Rosso1);
imagefilledellipse($Immagine[$x],110,35,60,60,$Rosso2);
imagefilledellipse($Immagine[$x],180,35,60,60,$Rosso3);}
// salva JPG
for($x=1;$x<4;$x++){
imagejpeg($Immagine[$x],"immagine".$x.".jpg",100);}
// salva PNG e libera la memoria
for($x=1;$x<4;$x++) {
imagepng($Immagine[$x],"immagine".$x.".png"); imagedestroy($Immagine[$x]);
}
?>
Risultato: