it* Simple Justified Gallery Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/mkpicindex URL:git://git.codevoid.de/mkpicindex codevoid.de 70 1Log /git/mkpicindex/log.gph codevoid.de 70 1Files /git/mkpicindex/files.gph codevoid.de 70 1Refs /git/mkpicindex/refs.gph codevoid.de 70 1README /git/mkpicindex/file/README.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 50ebf2ce63e6603ac02af60d4212c2eb689f2c73 /git/mkpicindex/commit/50ebf2ce63e6603ac02af60d4212c2eb689f2c73.gph codevoid.de 70 1parent 30d2f2725eb9b5e810deeca4036c6bc6a096b141 /git/mkpicindex/commit/30d2f2725eb9b5e810deeca4036c6bc6a096b141.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Fri, 25 Oct 2019 16:57:27 +0200 Err codevoid.de 70 i Err codevoid.de 70 ipush Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i A mkpicindex-static.sh | 182 +++++++++++++++++++++++++++++++ Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 182 insertions(+), 0 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/mkpicindex-static.sh b/mkpicindex-static.sh /git/mkpicindex/file/mkpicindex-static.sh.gph codevoid.de 70 it@@ -0,0 +1,182 @@ Err codevoid.de 70 i+#!/bin/sh Err codevoid.de 70 i+ Err codevoid.de 70 i+printf '%s' \ Err codevoid.de 70 i+'/*! Err codevoid.de 70 i+ * mkpicindex.sh - v0.1 Err codevoid.de 70 i+ * https://codevoid.de Err codevoid.de 70 i+ * Copyright (c) 2019 Stefan Hagen Err codevoid.de 70 i+ * Licensed under the ISC license. Err codevoid.de 70 i+ */ Err codevoid.de 70 i+' > LICENSE Err codevoid.de 70 i+ Err codevoid.de 70 i+# CONFIGURE Err codevoid.de 70 i+GALLERY_TITLE="My Gallery" # browser title Err codevoid.de 70 i+GALLERY_WIDTH=1000 # how wide will the gallery be Err codevoid.de 70 i+GALLERY_ROW_HEIGHT=150 # how high will the justified rows be? Err codevoid.de 70 i+GALLERY_RANDOMIZE=false # enable random sorting (true,false) Err codevoid.de 70 i+BODY_STYLE="color:orange; background:black;" # Err codevoid.de 70 i+THUMBNAIL_QUALITY=83 # quality for thumbnails Err codevoid.de 70 i+THUMBNAIL_PATH="thm" # relative path to thumbnail folder Err codevoid.de 70 i+INCLUDE_HEADER="HEADER" # file with html to include before gallery Err codevoid.de 70 i+INCLUDE_FOOTER="FOOTER" # file with html to include after gallery Err codevoid.de 70 i+ Err codevoid.de 70 i+### ZE PROGAM STARTZ HERE ############################################## Err codevoid.de 70 i+cleanup() { Err codevoid.de 70 i+ # DELETE BROKEN IMAGES Err codevoid.de 70 i+ printf '%s\n' "Removing incomplete thumbnails." >&2 Err codevoid.de 70 i+ find $THUMBNAIL_PATH -name "*_tmp.*" -exec rm -v "{}" \; Err codevoid.de 70 i+ exit 1 Err codevoid.de 70 i+} Err codevoid.de 70 i+trap cleanup 1 2 3 6 Err codevoid.de 70 i+ Err codevoid.de 70 i+# CREATE THUMBNAIL DIRECTORY Err codevoid.de 70 i+mkdir -p $THUMBNAIL_PATH Err codevoid.de 70 i+ Err codevoid.de 70 i+# INCLUDE CUSTOM HEADER & FOOTER Err codevoid.de 70 i+FOOTER=$([ -f $INCLUDE_FOOTER ] && cat $INCLUDE_FOOTER | sed 's/^/ /g') Err codevoid.de 70 i+HEADER=$([ -f $INCLUDE_HEADER ] && cat $INCLUDE_HEADER | sed 's/^/ /g') Err codevoid.de 70 i+ Err codevoid.de 70 i+# PRINT HEADER Err codevoid.de 70 i+printf '%s%s%s%s%s\n' \ Err codevoid.de 70 i+" Err codevoid.de 70 i+ Err codevoid.de 70 i+ $GALLERY_TITLE Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+$HEADER" Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+# take one image Err codevoid.de 70 i+ # resize to $ROW_HEIGHT Err codevoid.de 70 i+ # check if width exceeds $GALLERY_WIDTH Err codevoid.de 70 i+ # if not: take next picture Err codevoid.de 70 i+ # resize to $ROW_HEIGHT Err codevoid.de 70 i+ # check if first picture width + second picture width exceeds $GALLERY_WIDTH Err codevoid.de 70 i+ # if yes: Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+# $1 - Width Err codevoid.de 70 i+# $2 - Height Err codevoid.de 70 i+# < - Ratio (f) Err codevoid.de 70 i+get_aspect_ratio() { Err codevoid.de 70 i+ W=$1 # Width Err codevoid.de 70 i+ H=$2 # Height Err codevoid.de 70 i+ printf '%f' "$(printf "$FILE_WH" | awk -vTH=$TARGET_H '{ printf("%f", TH*($2/$1)) }')" Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+# CALCULATE ASPECT RATIO WITH FOR TARGET ROW HEIGHT Err codevoid.de 70 i+# $1 - path to image Err codevoid.de 70 i+# $2 - target row height Err codevoid.de 70 i+# ret - calculated width for target height Err codevoid.de 70 i+get_width() { Err codevoid.de 70 i+ local FILE="$1"; Err codevoid.de 70 i+ local TARGET_H="$2"; Err codevoid.de 70 i+ local FILE_WH="$(identify -format ' %w %h ' "$FILE" | awk '{ print $1" "$2 }')" Err codevoid.de 70 i+ printf '%.0f' "$(printf "$FILE_WH" | awk -vTH=$TARGET_H '{ printf("%f", TH*($2/$1)) }')" Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+get_streched_height() { Err codevoid.de 70 i+ printf "$GALLERY_HEIGHT $CURRENT_ROW_WIDTH $GALLERY_WIDTH" \ Err codevoid.de 70 i+ | awk '{ printf("%f", ($2/$1)*$3) }' Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+# ADD NEXT IMAGE AND DECIDE Err codevoid.de 70 i+# $1 - path to image Err codevoid.de 70 i+CURRENT_ROW_WIDTH=0 Err codevoid.de 70 i+CURRENT_ROW_FILES="" Err codevoid.de 70 i+add_image() { Err codevoid.de 70 i+ local FILE=$1 Err codevoid.de 70 i+ local NEXT_W=$(get_width "$FILE" "$GALLERY_ROW_HEIGHT") Err codevoid.de 70 i+ # when the next item with is too much for the current row.. Err codevoid.de 70 i+ if [ $(( $CURRENT_ROW_WIDTH + $NEXT_W )) > $GALLERY_WIDTH ]; Err codevoid.de 70 i+ # build gallery Err codevoid.de 70 i+ Err codevoid.de 70 i+ # calculate aspect ratio of row_height and all items Err codevoid.de 70 i+ # calculate target image height with gallery_width Err codevoid.de 70 i+ get_streched_height; Err codevoid.de 70 i+ # loop at images and resize to streched height Err codevoid.de 70 i+ # resize items Err codevoid.de 70 i+ # output souce Err codevoid.de 70 i+ Err codevoid.de 70 i+ # set leftover file as for next iteration Err codevoid.de 70 i+ CURRENT_ROW_WIDTH="$NEXT_W" Err codevoid.de 70 i+ CURRENT_ROW_FILES="|$FILE" Err codevoid.de 70 i+ else Err codevoid.de 70 i+ # add more items... Err codevoid.de 70 i+ CURRENT_ROW_WIDTH=$(( $CURRENT_ROW_WIDTH + $NEXT_W )) Err codevoid.de 70 i+ CURRENT_ROW_FILES="$CURRENT_ROW_FILES|$FILE" Err codevoid.de 70 i+ fi Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+for file in *.*; Err codevoid.de 70 i+do Err codevoid.de 70 i+ if [ -f "$file" ]; Err codevoid.de 70 i+ then Err codevoid.de 70 i+ case $(printf '%s' ${file##*.} | tr '[:upper:]' '[:lower:]') in Err codevoid.de 70 i+ jpg|jpeg|png) Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ *) printf '%s\n' "Ignoring: $file" >&2 ;; Err codevoid.de 70 i+ esac Err codevoid.de 70 i+ fi Err codevoid.de 70 i+done Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+## RESCALE AND ADD IMAGE Err codevoid.de 70 i+## PARAM 1: original Err codevoid.de 70 i+## 2: thumbnail_basename Err codevoid.de 70 i+## 3: thumbnail_format (extension) Err codevoid.de 70 i+#add_image() { Err codevoid.de 70 i+# local FILE="$1" Err codevoid.de 70 i+# get_width "$1" 300 Err codevoid.de 70 i+# local THUMB="$THUMBNAIL_PATH/$2-$GALLERY_ROW_HEIGHT" Err codevoid.de 70 i+# local EXT="$3" Err codevoid.de 70 i+# printf '%s\n' "Adding image: $FILE" >&2 Err codevoid.de 70 i+# if ! [ -f "$THUMB.$EXT" ] && [ "$FILE" != "$THUMB.$EXT" ]; Err codevoid.de 70 i+# then convert -quality $THUMBNAIL_QUALITY -sharpen 2x2 \ Err codevoid.de 70 i+# -coalesce -resize 6000x$GALLERY_ROW_HEIGHT\> \ Err codevoid.de 70 i+# -deconstruct "$FILE" "${THUMB}_tmp.$EXT" && \ Err codevoid.de 70 i+# mv "${THUMB}_tmp.$EXT" "$THUMB.$EXT" Err codevoid.de 70 i+# fi Err codevoid.de 70 i+# local WH="$(identify -format ' %w %h ' "$THUMB.$EXT" \ Err codevoid.de 70 i+# | awk '{ print "width="$1" height="$2 }')" Err codevoid.de 70 i+# printf ' %s\n' "" Err codevoid.de 70 i+# printf ' %s\n' "" Err codevoid.de 70 i+# printf ' %s\n' '' Err codevoid.de 70 i+#} Err codevoid.de 70 i+ Err codevoid.de 70 i+### MAIN LOOP ########################################################## Err codevoid.de 70 i+ Err codevoid.de 70 i+#for file in *.*; Err codevoid.de 70 i+#do Err codevoid.de 70 i+# if [ -f "$file" ]; Err codevoid.de 70 i+# then Err codevoid.de 70 i+# case $(printf '%s' ${file##*.} | tr '[:upper:]' '[:lower:]') in Err codevoid.de 70 i+# jpg|jpeg|png) Err codevoid.de 70 i+# add_image "$file" "${file%%.*}" "jpeg" ;; Err codevoid.de 70 i+# gif) Err codevoid.de 70 i+# add_image "$file" "${file%%.*}" "gif" ;; Err codevoid.de 70 i+# *) printf '%s\n' "Ignoring: $file" >&2 ;; Err codevoid.de 70 i+# esac Err codevoid.de 70 i+# fi Err codevoid.de 70 i+#done Err codevoid.de 70 i+ Err codevoid.de 70 i+### MAIN LOOP END ###################################################### Err codevoid.de 70 i+ Err codevoid.de 70 i+# PRINT FOOTER Err codevoid.de 70 i+printf '%s%s\n' \ Err codevoid.de 70 i+" Err codevoid.de 70 i+$FOOTER Err codevoid.de 70 i+ Err codevoid.de 70 i+" Err codevoid.de 70 .