#!/usr/bin/env zsh # Copyright (C) 2022-2023 Sergey Matveev pagesize=${PAGESIZE:-100} set -e setopt EXTENDED_GLOB djxl2ppm() { djxl $1 $1.ppm [[ -r ${1}-ec0.ppm ]] || return 0 mv ${1}-ec0.ppm $1.ppm rm ${1}-ec1.pgm } imgs=((*.jxl|*.webp~*.preview.webp)(Om)) for (( i=1 ; i <= ${#imgs} ; i++ )) { local img=${imgs[$i]} echo $i $img local dst=$i.img.html cat > $dst < Image ${i}/${#imgs}: $img EOF [[ $i -eq 1 ]] || echo "<<<" >> $dst [[ $i -eq ${#imgs} ]] || echo ">>>" >> $dst echo "
\"$img\"" >> $dst [[ -r ${img}.txt ]] && { echo "
" >> $dst
        cat ${img}.txt >> $dst
        echo "
" >> $dst } echo "
" >> $dst if [[ $img:e = jxl ]] ; then echo "
" >> $dst
        jxlinfo $img > $img.info
        cat $img.info >> $dst
        echo "
" >> $dst echo "Alternative formats:" >> $dst if grep -q "JPEG bitstream reconstruction" $img.info ; then [[ -r $img.jpg ]] || { djxl $img $img.jpg touch -r $img $img.jpg } echo "JPEG" >> $dst else [[ -r $img.png ]] || { djxl2ppm $img pamtopng < $img.ppm > $img.png rm $img.ppm pngcrush -rem alla -rem allb -z 2 $img.png $img.png.png mv $img.png.png $img.png advpng -z -4 $img.png touch -r $img $img.png } echo "PNG" >> $dst fi rm $img.info [[ -r $img.preview.webp ]] || djxl2ppm $img else echo "
" >> $dst
        webpinfo $img >> $dst
        echo "
" >> $dst [[ -r $img.preview.webp ]] || dwebp $img -ppm -o $img.ppm fi echo "
" >> $dst
    exiftool -a -u -g1 $img >> $dst
    echo "
" >> $dst [[ -r $img.ppm ]] && { pnmscale -w 100 < $img.ppm > $img.ppm.ppm mv $img.ppm.ppm $img.ppm cwebp -pass 10 -alpha_filter best -m 6 -mt -o $img.preview.webp $img.ppm rm $img.ppm touch -r $img $img.preview.webp } echo "" >> $dst touch -r $img $dst } pages=$(( ${#imgs} / $pagesize )) [[ $(( $pages * $pagesize )) -lt ${#imgs} ]] && pages=$(( $pages + 1 )) for (( p=1 ; p <= $pages ; p++ )) { local dst=$p.page.html cat > $dst < Page ${p}/$pages EOF [[ $p -eq 1 ]] || echo "<<<" >> $dst [[ $p -eq $pages ]] || echo ">>>" >> $dst echo "| home" >> $dst echo "| end" >> $dst echo "
" >> $dst for (( i=1 ; i <= $pagesize ; i++ )) { img=$(( ( $p - 1 ) * $pagesize + $i )) [[ $img -le ${#imgs} ]] || break echo "" >> $dst echo "\"preview" >> $dst } echo "" >> $dst echo page $p }