Calendario de fotos

El presente código PHP toma una colección de fotos jpgcuyo nombre empiece por AAAA-MM-DD— y crea una serie de imágenes en miniatura que encajan en las celdas de un calendario mensual.

El código de cada mes se genera con etiquetas <table> HTML.

Características

Las miniaturas se muestran en el calendario a 100×100px, aunque en realidad se calculan a 256×256px.

Al picar en la miniatura se muestra la foto original y también las otras fotos que hubiese de la misma fecha.

La fotos se mostrarán adaptadas al tamaño actual del navegador, independientemente del tamaño original de la foto.

Con el navegador Chromium se puede crear un informe PDF, donde los enlaces seguirán funcionando, aunque dentro del navegador.

Ejemplo en ejecución

Instrucciones de uso

  1. Descarga el proyecto CalendarPhotos.7z
  2. Cópialo dentro de la carpeta que quieras de un servidor PHP.
  3. Pega todos las imágenes que tengas dentro de la carpeta photos
  4. En el navegador web abre index.php ubicado en la carpeta raíz.
    • Escanea las fotos para que el programa rellene photos.json.
    • Escanea las miniaturas para que el programa:
      • rellene el archivo thumbs.json
      • cree las imágenes en miniatura dentro de la carpeta thumbs.
  5. Ejecuta el enlace Calendario de fotos para ver el resultado en el navegador.

¿Cómo deben ser las fotos originales?

  • Dentro de la carpeta photos puedes crear tantas carpetas y subcarpetas como te vaya bien.
  • Todos las fotos deben ser de tipo jpg o jpeg.
  • Los primeros símbolos numéricos del nombre de la imagen deben de ser AAAAMMDD:
    el año con 4 cifras, el mes con 2 y el día del mes con 2.
    El resto del nombre de la foto es libre. Ejemplos válidos:
    • 20200817_153500.jpg
    • image_2020-08-17_15.30.00.jpeg
    • piscina 2020 08 17 en colegio.jpg
  • La foto puede ser de forma cuadrada, retrato o apaisada.
  • El tamaño de la foto puede ser muy grande (por eso se harán las miniaturas).
  • Pueden haber tantas imágenes por fecha como se quiera. Se calculará la miniatura según el orden alfabético de las fotos.
  • Cuando visualices la foto correspondiente a una miniatura, también se mostrarán el resto de fotos de ese mismo día. La foto correspondiente a la miniatura saldrá la primera y un poco más grande que el resto de fotos.

Archivos de datos JSON que se rellenan

  • photos.json

    • Contiene todos las fotos válidas de la carpeta photos.
    • Están clasificadas por 1ºaño, 2ºmes y 3ºdía.
    • Si hay meses intermedios sin fotos, estos no apacererán.
    • Se usa para rellenar thumbs.json y cuando se muestra una miniatura.
  • thumbs.json

    • La clave es una fecha del calendario: AAAA-MM-DD
    • La clave también es el nombre de la miniatura: thumbs/2020-08-17.jpg
    • El valor de la clave es la ruta de la foto correspondiente a la miniatura.
      Por ejemplo: photos/año2000/mes08/20200817_153500.jpg
    • Se utiliza para mostrar el calendario.

Código fuente

  • Carpeta lib
    • Código MonthTable.php — Crea un calendario mensual a partir de una etiqueta <table>.
      Usa el archivo thumbs.json para pintar las miniaturas.
    • Código ScanPhotos.php — Rellena el contenido de photos.json
    • Código ScanThumbs.php y Image.php — Rellena el contenido de thumbs.json
      y crea las miniaturas en la carpeta thumbs
  • Carpeta css
  • Carpeta photos
    • El contenido de esta carpeta serán las fotos que ponga el usuario
  • Carpeta thumbs
    • El contenido serán las imágenes en miniatura creadas
      a partir de algunas de las fotos de la carpeta photos
  • Carpeta principal

Comments

  1. 1 Francisco 2020-09-09 About 1 month ago
    Este código usa las funciones GD para el tratamiento de imágenes en PHP.

    Mi código GD no orientaba correctamente una miniatura en modo apaisado si provenía de algunas imágenes apaisadas JPEG. Esto era porque a veces había un parámetro EXIF de orientación que no era cero, y que mi código GD antes ignoraba.

    Ahora orienta correctamente la imagen gracias a que la función exif_read_data() me da el parámetro EXIF de orientación del que antes carecía.

    El cambio está puesto en "/lib/Image.php" y en "/photos.php" bajo el epígrafe "EXIF orientation"
Proinf.net, ©2003-2020 ci 3.1.10 (CC) This work is licensed under Creative Commons This software is subject to the CC-GNU GPL