Dies ist die Info zur Technik der privaten Seite

https://ganske.org/piston (Info)

auf ganske.org

Die Seite läuft auf einem VServer unter ubuntu.


Auf diesem Server verwendete Hilfsmittel:
inotify
cwebp
Imagemagick (convert)
avif-binary (avif)

Alle diese Hilfsmittel existieren prinzipiell auch in einer Implementation fuer Windows (inotify-win, die anderen direkt auf der jeweiligen Seite).



Wenn eine Datei im Verzeichnis piston nach einem Schreibvorgang geschlossen wird oder dorthin kopiert oder verschoben wird, wird das Umrechnen des Bildes von inotify angestoßen:
:(some_path)/piston$ cat donotify.sh
if [ $# -eq 1 ]
then
  cd $1
fi
echo start donotify
inotifywait -mrq -e close_write,moved_to --format %w%f . | while read FILE; do
    date +"%Y-%m-%d %T"
    if [[ ${FILE##*.} =~ jpg|png|gif && $FILE != *".crop."* && $FILE != *".mini."* ]]; then
      sleep 1
      dosmalljpg.sh "$FILE"
      sleep 1
      dosmallwebp.sh "$FILE"
      sleep 1
      dosmallavif.sh "$FILE"
    else
      echo ignored "$FILE"
    fi
  done
Das ist ein alter Stand zur Darstellung des Prinzips.

Zum Umrechnen auf 640 Pixel Breite würde cwebp alleine mit option -resize 640 0 helfen, aber der gaussian-blur von imagemagick sorgt dafür, dass die Daten etwas besser komprimiert werden können.
:(some_path)/piston$ cat (dir_in_PATH)/dosmalljpg.sh 
rm "$1.mini.jpg"
echo start >"$1.mini.pic"
#convert $1 -strip -gaussian-blur 0.1 -quality 99% -resize 640x640 $1.crop.png
#guetzli --quality 88 $1.crop.png $1.mini.jpg && rm $1.crop.png
convert "$1" -strip -gaussian-blur 0.1 -quality 66% -resize 640x640 "$1.mini.jpg"
rm "$1.mini.pic"

:(some_path)/piston$ cat (dir_in_PATH)/dosmallwebp.sh
rm "$1.mini.webp"
echo start >"$1.mini.pic"
convert "$1" -strip -gaussian-blur 0.01 -quality 99% -resize 640x640 "$1.crop.png"
cwebp -q 50 "$1.crop.png" -o "$1.mini.webp" && rm "$1.crop.png"
rm "$1.mini.pic"

:(some_path)/piston$ cat (dir_in_PATH)/dosmallavif.sh 
rm "$1.mini.avif"
echo start >"$1.mini.pic"
convert "$1" -strip -gaussian-blur 0.01 -quality 99% -resize 640x640 "$1.crop.png"
avif -e "$1.crop.png" -o "$1.mini.avif" -q 37  && rm "$1.crop.png"
rm "$1.mini.pic"

Die Parameter im Detail sind mittlerweile andere, beispielsweise erzeugt mittlerweile convert auch avif und heif.

Unix-spezifisch: Es wird automatisch mittels cron beim Reboot in einer tmux-Session gestartet:
:(some_path)/piston$ crontab -l
SHELL=/bin/bash
MAILTO=""
PATH=(hidden)
@reboot tmux new -d '(some_path)/piston/donotify.sh (some_path)/piston'