<html>
<!-- Isma Etxeberria Agiriano (cc) 2012
! v1.2
! Bugs:
! Cuidado con las carpetas que contienen caracteres especiales,
! como ñ, á, é, ... no funciona.
! Uso:
! La manera más sencilla es ubicar este script dentro de una carpeta "scripts"
! y las fotos en otra carpeta "fotos". Si representamos con ~ la raíz del servidor:
! ~
! |__ scripts
! |__ creamini.php
! |__ fotos
! |__ 2011-02-04 Nepal
! |__ 2011-02-21 Ordesa
! |__ 2011-03-08 Aranzazu
! |__ foto0001.jpg
! |__ foto0002.jpg
!
! Poner en la variable $carpeta (línea con un comentario !*!) el nombre de la carpeta
! que contiene las fotos, por ejemplo, "2011-03-08 Aranzazu".
!
! Al ejecutar este script con las dos fotos del ejemplo se generarán (marcados con ***):
! |__ fotos
! |__ 2011-03-08 Aranzazu
!*** |__ 200x
!*** |__ 200xfoto0001.jpg
!*** |__ 200xfoto0002.jpg
!*** |__ index.html
!*** |__ 800x
!*** |__ 800x
!*** |__ 800xfoto0001.jpg
!*** |__ 800xfoto0002.jpg
!*** |__ index.html
!*** |__ zoom.html
! |__ foto0001.jpg
! |__ foto0002.jpg
!*** |__ index.html
-->
<head>
<title>Generador de miniaturas</title>
</head>
<body>
<?php
$baseJpg = '../fotos/'; // Ubicación de las fotos relativa a esta carpeta
$carpeta='2011-03-08 Arantzazu'; // !*! Poner aquí el nombre la carpeta donde se encuentran las fotos
$carJpg= $baseJpg . $carpeta . "/";
$miniaturas200=$carJpg . '200x'; // Pondremos las miniaturas 200x generadas dentro de una carpeta
$miniaturas800=$carJpg . '800x'; // Pondremos las miniaturas 800x generadas dentro de otra carpeta
set_time_limit(3600); // Cuando tarda mucho para que no termine
// Si no existen las carpetas para las miniaturas crearlas
if (!is_dir($miniaturas200))
mkdir($miniaturas200);
if (!is_dir($miniaturas800))
mkdir($miniaturas800);
$o200 = "";
$o800 = "";
ini_set("memory_limit","100M");
// Abrimos la carpeta con las fotos para leer los nombres de los ficheros
$fd = opendir ($carJpg);
$fotos = array(); // Introduciremos los nombres de los ficheros de extensión JPG
// Iremos formando el contenido HTML de tres ficheros
// - $orig contendrá las fotos originales, aunque tardará mucho en cargar
// - $o200 contendrá las miniaturas 200x con enlaces a las de 800x
// - $o800 contendrá las miniaturas 800x con enlaces a las fotos originales
while (($file = readdir($fd)) !== false) {
$nomExt = explode(".", $file); // Obtener subcadenas separadas por "."
if (strtoupper($nomExt[1]) == "JPG") { // Mirar si extensión es JPG en condiciones normales
$orig .= '<img width="800" src = "' .$file . '">
'; // Aquí hay un salto de línea que entra en la cadena
$o200 .= '<a href ="../800x/zoom.php?foto=' . $file . '"><img src = "200x' .$file . '"></a>
';
$o800 .= '<a href ="../' . $file . '"> <img src = "800x' . $file . '"></a>
';
// Sólo introduciremos los ficheros si no existen, sobre todo si algo ha fallado
// y queremos empezar de nuevo.
// En realidad deberíamos tener un vector $fotos para cada tipo de miniatura
if (!file_exists($carJpg . "200x/200x".$file) &&
!file_exists($carJpg . "800x/800x".$file))
$fotos[] = $file;
}
}
closedir($fd); // Hemos terminado de leer el contenido de la carpeta
printf ("<h3>Generando miniaturas en la carpeta $carJpg</h2>\n"); // Variable dentro de la cadena!!
// Tiempo de base
$mt = microtime(); // Devuelve fracción/segundos desde 1/1/1970, p. ej. "0.02762800 1299609157"
$mta = explode(" ", $mt); // Obtener [0.02762800, 1299609157]
$mt0 = $mta[0] + $mta[1]; // Hora de comienzo, p. ej. 1299609157.02762800
$n = count($fotos);
$i = 1;
foreach ($fotos as $p) {
echo date ("Y/m/d H:i:s");
printf (" %3d de %3d", $i, $n);
printf ("%s", $carJpg . $p);
flush ();
$src_img = imagecreatefromjpeg($carJpg . $p);
$old_x = imageSX($src_img);
$old_y = imageSY($src_img);
if ($old_x > $old_y) {
$tw200 = 200;
$th200 = $old_y * (200 / $old_x);
$tw800 = 800;
$th800 = $old_y * (800 / $old_x);
}
else if ($old_x < $old_y) {
$th200=200;
$tw200=$old_x*(200/$old_y);
$th800=800;
$tw800=$old_x*(800/$old_y);
}
else {
$tw200 = $th200 = 200;
$tw800 = $th800 = 800;
}
$dst_img800 = ImageCreateTrueColor ($tw800, $th800);
$dst_img200 = ImageCreateTrueColor ($tw200, $th200);
imagecopyresampled ($dst_img800, $src_img, 0, 0, 0, 0, $tw800, $th800, $old_x, $old_y);
imagecopyresampled ($dst_img200, $dst_img800, 0, 0, 0, 0, $tw200, $th200, $tw800, $th800);
imagejpeg ($dst_img200, $carJpg . "200x/200x" . $p);
imagejpeg ($dst_img800, $carJpg . "800x/800x" . $p);
imagedestroy ($dst_img200);
imagedestroy ($dst_img800);
imagedestroy ($src_img);
$mt = microtime();
$mta = explode(" ", $mt);
$mt1 = $mta[0] + $mta[1];
$elp = $mt1 - $mt0; // Elapsed
$tot = ($n * $elp) / $i;
$min = ($tot - $elp) / 60;
printf (" - Quedan <b>%.2f min (%.2f sg)</b> - ", $min, $tot - $elp);
printf ("%.2f/%.2f (%d%%)<br />\n" , $elp, $tot, 100 * $i / $n);
printf ("<img src='%s'><br />\n", $carJpg . "200x/200x" . $p);
flush ();
$i++;
}
$cabecera = "<html><head>
<title>Fotos " .
$carpeta . "</title></head>
<body>";
$fin = "</body></html>";
// guardar el índice en el sistema de ficheros local
chdir($carJpg);
$fp = fopen("index.html", "w");
fputs ($fp, $cabecera);
fputs ($fp, $orig);
fputs ($fp, $fin);
fclose($fp);
chdir("..");
chdir($miniaturas200);
$fp = fopen("index.html", "w");
fputs ($fp, $cabecera);
fputs ($fp, $o200);
fputs ($fp, $fin);
fclose($fp);
chdir("../800x");
$fp = fopen("index.html", "w");
fputs ($fp, $cabecera);
fputs ($fp, $o800);
fputs ($fp, $fin);
fclose($fp);
//readFile("imageIndex.html");
print "<a href =\"$carJpg\">Ver todas las fotos</a><br />\n";
print "<a href =\"$miniaturas200\">Ver miniaturas 200x</a><br />\n";
print "<a href =\"$miniaturas800\">Ver miniaturas 800x</a>\n";
include('genvis.php');
GenerarVisor ();
?>
</body>
</html>