#!/bin/bash
#
# Rolf Niepraschk <Rolf.Niepraschk@ptb.de>, 2016-12-12
#
# Erzeugt aus einem leeren Messgeräte-Bild und neun 7-Segment-Bildern
# neue Messgeräte-Bilder mit zufälliger 6-stelliger Anzeige
#

MAIN="FLUKE-8840A" # device name
IMAGE_DIR=./images
MAX_FILES=10

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

dotFile='dot.png'
plusFile='plus.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[6]='+192+173.65'
digitPos[5]='+226+173.65'
digitPos[4]='+260+173.65'
digitPos[3]='+294+173.65'
digitPos[2]='+328+173.65'
digitPos[1]='+362+173.65'

dotPos[6]='+192+173.65'
dotPos[5]='+226+173.65'
dotPos[4]='+260+173.65'
dotPos[3]='+294+173.65'
dotPos[2]='+328+173.65'
dotPos[1]='+362+173.65'

signPos='+187+173'

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

DPR=$((RANDOM % 6 + 1)) # random dot position (1..6)
SIGN=$((RANDOM % 2)) # random (0|1=+|-)
if [ $SIGN == 0 ]; then
  SF=$plusFile # sign file
  SCH='+'  # sign character
else
  SF=$minusFile
  SCH='-'
fi

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

 value="${SCH}${DNR[6]}${DP[6]}${DNR[5]}${DP[5]}${DNR[4]}${DP[4]}"
value+="${DNR[3]}${DP[3]}${DNR[2]}${DP[2]}${DNR[1]}${DP[1]}"

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

convert body.png \
  $SF                       -geometry $signPos       -composite \
  ${digitFile[ ${DNR[6]} ]} -geometry ${digitPos[6]} -composite \
  ${DF[6]} -geometry ${dotPos[6]} -composite \
  ${digitFile[ ${DNR[5]} ]} -geometry ${digitPos[5]} -composite \
  ${DF[5]} -geometry ${dotPos[5]} -composite \
  ${digitFile[ ${DNR[4]} ]} -geometry ${digitPos[4]} -composite \
  ${DF[4]} -geometry ${dotPos[4]} -composite \
  ${digitFile[ ${DNR[3]} ]} -geometry ${digitPos[3]} -composite \
  ${DF[3]} -geometry ${dotPos[3]} -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

Test:

SF=$plusFile
fname=yy.png
DNR[6]=1
DNR[5]=7
DNR[4]=3
DNR[3]=0
DNR[2]=5
DNR[1]=6

DF[6]=$dotFile
DF[5]=$emptyCanvas
DF[4]=$emptyCanvas
DF[3]=$emptyCanvas
DF[2]=$emptyCanvas
DF[1]=$emptyCanvas

convert body.png \
  $SF                       -geometry $signPos       -composite \
  ${digitFile[ ${DNR[6]} ]} -geometry ${digitPos[6]} -composite \
  ${DF[6]} -geometry ${dotPos[6]} -composite \
  ${digitFile[ ${DNR[5]} ]} -geometry ${digitPos[5]} -composite \
  ${DF[5]} -geometry ${dotPos[5]} -composite \
  ${digitFile[ ${DNR[4]} ]} -geometry ${digitPos[4]} -composite \
  ${DF[4]} -geometry ${dotPos[4]} -composite \
  ${digitFile[ ${DNR[3]} ]} -geometry ${digitPos[3]} -composite \
  ${DF[3]} -geometry ${dotPos[3]} -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 \
  yy.png
  
-----------------------------------------------------------------------

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