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
Canale Alpha trasparenza e opacità
differenze fra jpg e png con canale Alpha


e-book
cartaceo

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: