From 9cd540d355638f580ea2d8ca782dd117de709b25 Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Sun, 14 Apr 2024 15:32:12 -0400 Subject: Add HTML generation --- .gitignore | 2 + generate.sh | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 .gitignore create mode 100644 generate.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..a5f66a9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +static/ +*.JPG diff --git a/generate.sh b/generate.sh new file mode 100644 index 00000000..5e26638b --- /dev/null +++ b/generate.sh @@ -0,0 +1,155 @@ +#!/bin/sh +set -eu + +mkdir -p static/preview static/thumbnail + +resize() { + local photo=$1 size=$2 output=$3 + if ! test -f $output; then + # FIXME: convert complains about not understanding XML + echo $output >&2 + convert $photo -auto-orient -thumbnail $size $output 2>/dev/null ||: + fi +} + +preview() { + local photo=$1 + local preview=preview/${photo##*/} + resize $photo 25% static/$preview + echo $preview +} + +thumbnail() { + local photo=$1 + local thumbnail=thumbnail/${photo##*/} + resize $photo 5% static/$thumbnail + echo $thumbnail +} + +encode() { + sed ' + s/&/\&/g + s/ + + ${title} + +

${title}

+ EOF +} + +photo_info() { + local photo=$1 + ExposureTime= + FNumber= + FocalLength= + PhotographicSensitivity= + eval $( + identify -format '%[EXIF:*]' $photo 2>/dev/null | + grep -E 'ExposureTime|FNumber|FocalLength|PhotographicSensitivity' | + sed 's/^exif://' + ) +} + +photo_id() { + local photo=$1 + photo=${photo##*/} + photo=${photo%%.*} + echo $photo +} + +page_photo() { + local photo=$1 preview=$2 description=$3 + if ! test -f $description; then + description=/dev/null + fi + photo_info $photo + cat <<-EOF +
+ + $(encode $description) + +
+ ${ExposureTime} · + ƒ/$(bc -S 1 -e ${FNumber}) · + $(bc -e ${FocalLength}) mm · + ${PhotographicSensitivity} ISO +
+ description + $(encode $description) +
+
+
+ EOF +} + +index_head() { + cat <<-EOF + + + Photos + + EOF +} + +index_page() { + local date=$1 + cat <<-EOF +

$(page_title $date)

+ EOF +} + +index_photo() { + local date=$1 photo=$2 thumbnail=$3 + cat <<-EOF + + EOF +} + +set -- +for date in 20*; do + mkdir -p static/${date} + page=static/${date}/index.html + if ! test -f $page; then + echo $page >&2 + page_head $date >$page + for photo in ${date}/*.JPG; do + preview=$(preview $photo) + if ! test -f static/${photo}; then + ln $photo static/${photo} + fi + page_photo $photo $preview ${photo%.JPG}.txt >>$page + done + fi + set -- $date "$@" +done + +echo static/index.html >&2 +index_head >static/index.html +for date; do + index_page $date >>static/index.html + for photo in ${date}/*.JPG; do + thumbnail=$(thumbnail $photo) + index_photo $date $photo $thumbnail >>static/index.html + done +done -- cgit 1.4.1