Ruotiamo le immagini

La visualizzazione di immagini è attività usuale nelle applicazioni web. In particolare se si tratta di fotografie, potrebbe risultare utile visualizzare le immagini ruotandole di una certa angolazione.

Ricordiamo prima di tutto che in HTML per visualizzare all'interno della pagina web un'immagine pippo.jpg dobbiamo usare il tag:

<img src="pippo.jpg" border="0">

Per visualizzare l'immagine ruotata utilizzeremo invece:

<img src="http://www.miodominio.it/imagerotate.php?img=pippo.jpg&gradi=90" border="0">

imagerotate.php è uno script che abbiamo realizzato noi e che riceve i due parametri img e gradi.

Ecco il suo codice sorgente:

<?php
/* Prelevo i due parametri */
$filename = $_GET['img']; // URL dell'immagine
$gra= $_GET['gradi'] % 360; // Rotazione sinistrorsa in gradi
$im = imagecreatefromjpeg($filename); // Legge il file immagine
header('Content-type: image/jpg'); // Invia al browser l'header opportuno


switch ($gra) {
 case 90:
  $im2=rotate_left90($im);
  break;
 case 180:
  $im2=flip($im);
  break;
 case 270:
  $im2=rotate_right90($im);
  break;
 default:
  $bg=imagecolorallocate($im, 255, 255, 255);
  $im2=imagerotate($im, $gra, $bg);
  break;
}
imagejpeg($im2); //Crea file jpg e lo invia al browser
imagedestroy($im); //libera memoria
imagedestroy($im2); //libera memoria
?>

<?php

function rotate_right90($im) {

$wid = imagesx($im);
$hei = imagesy($im);

$im2 = imagecreatetruecolor($hei,$wid);
for($i = 0;$i < $wid; $i++) {
 for($j = 0;$j < $hei; $j++) {
  $ref = imagecolorat($im,$i,$j);
  imagesetpixel($im2,$hei - $j - 1,$i,$ref);
 }
}
return $im2;

}

function rotate_left90($im) {
$wid = imagesx($im);
$hei = imagesy($im);
$im2 = imagecreatetruecolor($hei,$wid);
for($i = 0;$i < $wid; $i++) {
 for($j = 0;$j < $hei; $j++) {
  $ref = imagecolorat($im,$i,$j);
  imagesetpixel($im2,$j, $wid - $i - 1,$ref);
 }
}
return $im2;
}

function mirror($im) {
$wid = imagesx($im);
$hei = imagesy($im);
$im2 = imagecreatetruecolor($wid,$hei);
for($i = 0;$i < $wid; $i++) {
 for($j = 0;$j < $hei; $j++) {
  $ref = imagecolorat($im,$i,$j);
  imagesetpixel($im2,$wid - $i - 1,$j,$ref);
 }
}
return $im2;
}

function flip($im) {
$wid = imagesx($im);
$hei = imagesy($im);
$im2 = imagecreatetruecolor($wid,$hei);
for($i = 0;$i < $wid; $i++) {
 for($j = 0;$j < $hei; $j++) {
  $ref = imagecolorat($im,$i,$j);
  imagesetpixel($im2,$wid - $i -1,$hei - $j - 1,$ref);
 }
}
return $im2;
}

?>


Ed ecco un esempio di utilizzo:
090180
27045340


Mentre per la rotazione fine abbiamo utilizzato la imagerotate, per le rotazioni di un quarto e mezzo giro abbiamo realizzato tre funzioni che manualmente effettuano la trasposizione della matrice dei pixel originaria, utilizzando la imagecolorat e la imagesetpixel.


Commenti

Post più popolari