#!/bin/bash
#
# Rolf Niepraschk <Rolf.Niepraschk@ptb.de>, 2017-03-27
#
# Erzeugt aus einem leeren Messgeräte-Bild und neun 7-Segment-Bildern
# neue Messgeräte-Bilder mit zufälliger 6-stelliger Anzeige
#
# Parameter=Anzahl der Mantissenziffern
# (wenn angegeben, dann kein Exponenent)

MAIN="SRG-2" # device name
IMAGE_DIR=./images
MAX_FILES=10
MAX_DIGITS=6

if [ -n "$1" ]; then
  NUMBER_OF_DIGITS=$1
  SHOW_EXP=0
else
  NUMBER_OF_DIGITS=$MAX_DIGITS
  SHOW_EXP=1
fi

if (( $NUMBER_OF_DIGITS > $MAX_DIGITS )); then
  NUMBER_OF_DIGITS=$MAX_DIGITS
fi 
if (( $NUMBER_OF_DIGITS < 1 )); then
  NUMBER_OF_DIGITS=1
fi 

rm -rf "$IMAGE_DIR"
mkdir -p "$IMAGE_DIR"

dotFile='dot.png'
minusFile='minus.png'
emptyCanvas='xc:transparent'

digitFile[0]='digit-0.png'
digitFile[1]='digit-1.png'
digitFile[2]='digit-2.png'
digitFile[3]='digit-3.png'
digitFile[4]='digit-4.png'
digitFile[5]='digit-5.png'
digitFile[6]='digit-6.png'
digitFile[7]='digit-7.png'
digitFile[8]='digit-8.png'
digitFile[9]='digit-9.png'
digitFile[99]=$emptyCanvas

digitPos[10]='+119+177'
digitPos[9]='+161.4+177'
digitPos[8]='+203.8+177'
digitPos[7]='+246.2+177'
digitPos[6]='+288.6+177'
digitPos[5]='+331+177'
digitPos[4]='+373.4+177'
digitPos[3]='+415.8+177'
digitPos[2]='+458.2+177'
digitPos[1]='+500.6+177' 

esignPos=${digitPos[3]}

dotPos[10]='+119+177'
dotPos[9]='+161.4+177'
dotPos[8]='+203.8+177'
dotPos[7]='+246.2+177'
dotPos[6]='+288.6+177'
dotPos[5]='+331+177'
dotPos[4]='+373.4+177'
dotPos[3]='+415.8+177'
dotPos[2]='+458.2+177'
dotPos[1]='+500.6+177'

for ((FNb=1; FNb<=MAX_FILES; FNb++)); do

DPR=$((RANDOM % 6 + 5)) # random dot position (5..10)
ESIGN=$((RANDOM % 2)) # random (0|1=' '|-)
if [ $ESIGN == 1 ]; then
  ESF=$minusFile # sign file
  ESCH='-'  # sign character
else
  ESF=$emptyCanvas
  ESCH='_'
fi

for i in {1..10}; do
  DNR[$i]=$((RANDOM % 10)) # random digit number (0..9)
  if [ $DPR == $i ]; then
    DF[$i]="$dotFile"
    DP[$i]="." # dot character
  else
    DF[$i]=$emptyCanvas
    DP[$i]=""
  fi  
done 

value="${DNR[10]}${DP[10]}${DNR[9]}${DP[9]}${DNR[8]}${DP[8]}"
value+="${DNR[7]}${DP[7]}${DNR[6]}${DP[6]}${DNR[5]}${DP[5]}"
value+="_$ESCH"
value+="${DNR[2]}${DP[2]}${DNR[1]}${DP[1]}"

fname="$IMAGE_DIR/$MAIN@$value@.png"

value=""
for (( i=1; i<=$MAX_DIGITS; i++ )); do  
  if (( $i <= $NUMBER_OF_DIGITS )); then 
    eval DIGIT$i=${digitFile[ ${DNR[i+4]} ]}
    eval DF$i=${DF[i+4]}
    value+="${DNR[i+4]}${DP[i+4]}" 
  else
    eval DIGIT$i=$emptyCanvas;
    eval DF$i=$emptyCanvas;
  fi
done

if (( $SHOW_EXP > 0 )); then
  value+="E${DNR[2]}${DNR[1]}"
fi

fname="$IMAGE_DIR/$MAIN@$value@.png"

convert body.png \
  $DIGIT1  -geometry ${digitPos[10]} -composite \
  $DF1                  -geometry ${dotPos[10]}   -composite \
  $DIGIT2  -geometry ${digitPos[9]}  -composite \
  $DF2                   -geometry ${dotPos[9]}    -composite \
  $DIGIT3  -geometry ${digitPos[8]}  -composite \
  $DF3                   -geometry ${dotPos[8]}    -composite \
  $DIGIT4  -geometry ${digitPos[7]}  -composite \
  $DF4                   -geometry ${dotPos[7]}    -composite \
  $DIGIT5  -geometry ${digitPos[6]}  -composite \
  $DF5                   -geometry ${dotPos[6]}    -composite \
  $DIGIT6  -geometry ${digitPos[5]}  -composite \
  $DF6                   -geometry ${dotPos[5]}    -composite \
  $ESF                       -geometry $esignPos       -composite \
  ${digitFile[ ${DNR[2]} ]}  -geometry ${digitPos[2]}  -composite \
  ${DF[2]}                   -geometry ${dotPos[2]}    -composite \
  ${digitFile[ ${DNR[1]} ]}  -geometry ${digitPos[1]}  -composite \
  ${DF[1]}                   -geometry ${dotPos[1]}    -composite \
  $fname

exiv2 -M"set Exif.Image.ImageDescription value=$value" $fname

echo -e "$FNb:\t$fname"

done # MAX_FILES

exit
  
-----------------------------------------------------------------------

Auslesen der Exif-Daten:
exiv2 -g Exif.Image.ImageDescription -P v ./images/151.108@GERAET_X.png
--> value=151.108