La funzione
imageflip() ha limitazioni con le immagini che usano il canale Alpha.
Questa limitazione può essere superata usando la funzione
imagecopyresampled() che permette di leggere copiando l'immagine sorgente con valori negativi, e perciò invertendone i contenuti.
L'esempio seguente esegue il ribaltamento di immagini trecolor con
imagecopyresampled().
Il lavoro viene svolto all'interno della funzione RibaltamentoImmagine() che riceve la variabile $metodocon nella quale è specificato il metodo di ribaltamento.
La variabile $metodo può contenere una delle seguenti lettere 'o' , 'v', 'e' rispettivamente per orizzontale, verticale, entrambi.
Invocata la funzione viene caricata l'immagine Imma_png24_traspar_Alpha.png che viene ribaltata in base al contenuto della variabile $metodo .
La funzione viene chiamata tre volte con ciascuno dei tre contenuti possibili della variabile $metodo .
Le immagini ribaltate sono salvate su disco e l'ultima messa a video.
<?php
function RibaltamentoImmagine($metodo){
// recupera ammagine da ribaltare
$Imma_sorg =
imagecreatefrompng('Imma_png24_traspar_Alpha.png');
// recupera dimensioni immagine sorgente che saranno uguali all'immagine di destinazione
$Larg_sorg =
imagesx ($Imma_sorg); $Alt_sorg =
imagesy ($Imma_sorg);
// larghezza sorgente è uguale a quella della destinazione
$Larg_dest = $Larg_sorg; $Alt_dest = $Alt_sorg;
// crea immagine di destinazione
$Imma_Dest =
imagecreatetruecolor ( $Larg_dest, $Alt_dest );
// setta l'immagine per il salvataggio con trasparenza
imagecolortransparent($Imma_Dest,
imagecolorallocatealpha($Imma_Dest,0,0,0,127));
imagealphablending($Imma_Dest,false);
imagesavealpha($Imma_Dest,true);
// setta i dati per il tipo di ribaltamento
$X_sorg = 0; $Y_sorg = 0;
switch($metodo){
case 'o': $X_sorg = $Larg_dest -1; $Larg_sorg = -$Larg_dest;break; // orizontale
case 'v': $Y_sorg = $Alt_dest -1; $Alt_sorg = -$Alt_dest;break; //verticale
case 'e':$X_sorg = $Larg_dest -1; $Larg_sorg = -$Larg_dest;
$Y_sorg = $Alt_dest -1; $Alt_sorg = -$Alt_dest;
break; //entrambi
}
// esegue la funzione di ribaltamento
imagecopyresampled($Imma_Dest,$Imma_sorg,
0,0,
$X_sorg,$Y_sorg,
$Larg_dest,$Alt_dest,
$Larg_sorg,$Alt_sorg
);
imagepng($Imma_Dest,"NomeFile_Ribaltare_con_
imagecopyresampled_trasparenzaAlpha_".$metodo.".png");
imagepng($Imma_Dest); // al browser
imagedestroy($Imma_sorg);imagedestroy($Imma_Dest); // libera memoria
};
$metodo = "o"; RibaltamentoImmagine($metodo); // ribalta orizzontale
$metodo = "v"; RibaltamentoImmagine($metodo); // ribalta verticale
$metodo = "e"; RibaltamentoImmagine($metodo); // ribalta orizzontale e verticale
?>
Risultato: