<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>