// ################################################### // image gallery by Lorenzo Magon // ultima modifica 20-09-2008 // ################################################### function make_miniature($dir_img, $img_limit = 100, $img_width = 230, $didascalia = "no", $style="1") { // $$dir_img e' il percorso della cartella che contiene le foto da visualizzare // $img_limit e' il numero massimo di anteprime che voglio mostrare // $img_width e' la larghezza delle miniature, l'altezza viene calcolata di conseguenza // $didascalia abilita o disabilita la didascalia, si appoggia ad un file di testo // $style è lo stile css da caricarre per la visualizzazione // file con le didascalie, * viene usato per mandare a capo il testo // se non esiste viene creato in automatico con il nome delle foto // se vengono aggiunte foto alla dir il file non viene ricreato $description_file = "description.txt"; // per aggiustare la larghezza del div contenitore, dipende dal valore del bordo dell'immagine impostato nel CSS $adjust_width = 6; // main URL $mainURLx=explode('/', $_SERVER['PHP_SELF']); array_pop($mainURLx); array_shift($mainURLx); $mainURL="http://".$_SERVER['HTTP_HOST']."/".implode($mainURLx, '/'); // ----------------- if(!file_exists("$dir_img/")) return false; if ($didascalia == "si") { // carico tutte le didascalie delle foto... if($dir_img AND file_exists($dir_img."/".$description_file)) { $data = file($dir_img."/".$description_file); $num = count($data); if($num > 0) { for($i=0; $i < $num; $i++) { list($file, $descr) = split('::', $data[$i]); // con trim tolgo i carattteri vuoti all'inizio e alla fine delle stringhe $description[trim($file)] = trim($descr); } } } // ...altrimenti creo il file $description_file, se non esiste else { if (isset($dir_img)) { $handle_file = fopen($dir_img."/".$description_file, 'w'); if(file_exists($dir_img)){ if ($handle_dir = opendir("$dir_img/")) { while($file=readdir($handle_dir)) { if(preg_match("/\.jpg/i",$file) && substr($file, 0, 2)!='T_'){ $file_img=rawurldecode($file); $nome_immagine = $file_img." :: \r\n"; // scrivo il nome nel file description fwrite($handle_file, $nome_immagine); } } } } fwrite($handle_file, "foto_by :: "); // inserisco la riga per l'autore delle foto } } } // fine gestione file delle didascalie $handle = opendir("$dir_img/"); // leggo il nome delle foto dalla cartella indicata da $dir_img while($file=readdir($handle)) // inserisco tutti i nomi delle foto in un array $file_array[] = $file; foreach ($file_array as $file){ // creazione thumblails per le foto che non ne hanno una if((substr($file, -4) == ".jpg") && substr($file, 0, 2)!='T_'){ // le miniature devono iniziare per $inFile = $mainURL."/".myrawurlencode($dir_img)."/".rawurlencode($file); // ottengo le dimensioni attuali list($width_orig, $height_orig) = getimagesize($inFile); // calcolo le nuove dimensioni if ($width_orig > $height_orig) { // se l'immagine e' orizzontale $new_width = $img_width; $new_height = (int) (($img_width / $width_orig) * $height_orig); } else { // se l'immagine e' verticale $new_height = (int) ($img_width-($img_width / 100) * 20); // -20% $new_width = (int) (($new_height / $height_orig) * $width_orig); } $all_height_fileT[] = $new_height; // memorizzo le altezze delle miniature per poi trovare quella massima $fileT="$dir_img/T_$file"; $ricrea_miniatura = false; if(file_exists($fileT)) { // verifico se la miniatura ha le dimensioni richieste list($width_fileT, $height_fileT) = getimagesize($fileT); if ($width_fileT != $new_width OR $height_fileT != $new_height) $ricrea_miniatura = true; } if(!file_exists($fileT) OR $ricrea_miniatura) { // creo o ricreo la miniatura $thumb = imagecreatetruecolor($new_width,$new_height); $source = imagecreatefromjpeg($inFile); imagecopyresampled($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig); imagejpeg($thumb, $fileT, 100); // imagejpeg ( resource_image [, string filename [, int quality]] ) ob_flush(); flush(); } } } // fine creazione miniatura // ordino l'array in ordine decrescente rsort($all_height_fileT); // ottengo il valore piu' alto di altezza delle miniature $max_height_fileT = $all_height_fileT[0] + $adjust_width; // ------- unset($file_array); // svuoto l'array dei nomi delle foto $handle = opendir("$dir_img/"); while($file=readdir($handle)) // leggo di nuovo il nome delle foto per includere le miniature appena create $file_array[] = $file; sort($file_array); // ordino l'array dei nomi delle foto $count = 0; $div_width = $img_width + $adjust_width; foreach ($file_array as $file){ if((substr($file, -4) == ".jpg") AND substr($file, 0, 2)=='T_') // includo solo le miniature { $_GETdir=myrawurlencode($dir_img); $fileT="$dir_img/$file"; $file_img=rawurldecode(substr($file, 2)); list($width_fileT, $height_fileT) = getimagesize($fileT); $nomeImmagine=substr($file_img, 0,-4); if ($didascalia == "si") { // se la desciption non e' vuota la didascalia diventa il nome dell'immagine if ($description[$file_img] != NULL) $nomeImmagine = htmlspecialchars(stripslashes($description[$file_img])); $didascalia_text = "
(".$description[foto_by].")
"; return print $fotogallery; } // fine make_miniature() //***************************************************************** // funzioni aggiunte da Lorenzo function myrawurlencode ( $TheVal ) { return str_replace("%2F","/",rawurlencode($TheVal)); } function myrawurldecode ( $TheVal ) { return rawurldecode(str_replace("/","%2F",$TheVal)); } ?>