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

MAIN="KEITHLEY-2701" # device name
IMAGE_DIR=./images
MAX_FILES=10
MAX_DIGITS=7

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 # empty canvas

digitPos[7]='+185+220'
digitPos[6]='+207+220'
digitPos[5]='+229+220'
digitPos[4]='+251+220'
digitPos[3]='+273+220'
digitPos[2]='+295+220'
digitPos[1]='+317+220'

dotPos[7]=${digitPos[7]}
dotPos[6]=${digitPos[6]}
dotPos[5]=${digitPos[5]}
dotPos[4]=${digitPos[4]}
dotPos[3]=${digitPos[3]}
dotPos[2]=${digitPos[2]}
dotPos[1]=${digitPos[1]}

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

DPR=$((RANDOM % $NUMBER_OF_DIGITS + 1)) # random dot position (1..$NUMBER_OF_DIGITS)
for i in {1..7}; 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 

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]} ]}
    eval DF$i=${DF[i]}
    value+="${DNR[i]}${DP[i]}" 
  else
    eval DIGIT$i=$emptyCanvas;
    eval DF$i=$emptyCanvas;
  fi
done

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

convert body.png \
  $DIGIT1  -geometry ${digitPos[7]} -composite \
  $DF1                  -geometry ${dotPos[7]}     -composite \
  $DIGIT2  -geometry ${digitPos[6]}  -composite \
  $DF2                   -geometry ${dotPos[6]}    -composite \
  $DIGIT3  -geometry ${digitPos[5]}  -composite \
  $DF3                   -geometry ${dotPos[5]}    -composite \
  $DIGIT4  -geometry ${digitPos[4]}  -composite \
  $DF4                   -geometry ${dotPos[4]}    -composite \
  $DIGIT5  -geometry ${digitPos[3]}  -composite \
  $DF5                   -geometry ${dotPos[3]}    -composite \
  $DIGIT6  -geometry ${digitPos[2]}  -composite \
  $DF6                   -geometry ${dotPos[2]}    -composite \
  $DIGIT7  -geometry ${digitPos[1]}  -composite \
  $DF7                   -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

echo 1:  $DIGIT1  -geometry ${digitPos[7]} -composite 
echo 2:  $DF1                  -geometry ${dotPos[7]}     -composite 
echo 3:  $DIGIT2  -geometry ${digitPos[6]}  -composite 
echo 4:  $DF2                   -geometry ${dotPos[6]}    -composite
echo 5:  $DIGIT3  -geometry ${digitPos[5]}  -composite 
echo 6:  $DF3                   -geometry ${dotPos[5]}    -composite 
echo 7:  $DIGIT4  -geometry ${digitPos[4]}  -composite 
echo 8:  $DF4                   -geometry ${dotPos[4]}    -composite 
echo 9:  $DIGIT5  -geometry ${digitPos[3]}  -composite 
echo 10:  $DF5                   -geometry ${dotPos[3]}    -composite
echo 11:  $DIGIT6  -geometry ${digitPos[2]}  -composite
echo 12:  $DF6                   -geometry ${dotPos[2]}    -composite 
echo 13:  $DIGIT7  -geometry ${digitPos[1]}  -composite
echo 14:  $DF7                   -geometry ${dotPos[1]}    -composite 
echo 15:  $fname

exit