#!/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