Considerando l'immagine una matrice bidimensionale di pixel, è possibile riorganizzarla liberamente.
Un modo è quello di creare nuove immagini applicandovi distorsioni che abbiano una qualche utilità.
Nello script, viene caricata in memoria un'immagine sorgente già esistente con raffigurata una bandiera.
Ne vengono lette le dimensioni e con quelle creata un'immagine $Risultato vuota e trasparente.
Sono poi letti, uno per uno, i pixel dell'immagine sorgente, calcolata una distorsione, e quindi, questo valore, scritto nell'immagine $Risultato.
<?php
function EffettoVento($Immagine){
// dimensioni immagine
$Larghezza =
imagesx($Immagine); $Altezza =
imagesy($Immagine);
$Risultato =
imagecreatetruecolor($Larghezza,$Altezza); // immagine vuota delle stesse dimensioni
$CanaleAlpha =
imagecolorallocatealpha($Risultato, 0, 0, 0, 127);
imagefill($Risultato, 0, 0, $CanaleAlpha);
imagealphablending( $Risultato,false);
imagesavealpha($Risultato, true); // salva con trasparenza
for ($x = 0; $x < $Larghezza; $x++) {// scansione immagine sorgente
for ($y = 0; $y < $Altezza; $y++) {
$rgba =
imagecolorsforindex($Immagine,
imagecolorat($Immagine, $x, $y));// legge pixel
// alloca colore con dati letti nel pixel
$Colore =
imagecolorallocatealpha($Risultato,$rgba["red"], $rgba["green"], $rgba["blue"], $rgba["alpha"]);
// applica distorsione su asse y
$DistrorsioneY = ($y + round(15*cos($x/75)) + $Altezza) % $Altezza;
imagesetpixel($Risultato, $x, $DistrorsioneY, $Colore); // scrive i pixel nell'immagine $Risultato
}}
header("Content-type: image/png");
imagepng($Risultato,"NomeFile.png"); // salva immagine
imagepng($Risultato); // al browser
}
$Immagine =
imagecreatefrompng('bandiera.png'); // carica immagine
EffettoVento($Immagine); // modifica immagine
imagedestroy($Immagine); imagedestroy($Risultato);// libera memoria
?>