Skip to content
Snippets Groups Projects
createImages 3.08 KiB
#!/bin/bash
#
# Rolf Niepraschk <Rolf.Niepraschk@ptb.de>, 2017-03-31
#
# Erzeugt aus einem leeren Messgeräte-Bild und neun 7-Segment-Bildern
# neue Messgeräte-Bilder mit zufälliger Anzeige
#
# Parameter1 = Anzahl der erzeugten Bilddateien
#
# Parameter2 = Anzahl der Einzelziffern

MAIN="F250" # device name
IMAGE_DIR=./images
MAX_DIGITS=5 # do not edit!
MAX_FILES=10 # do not edit!
NUMBER_OF_DIGITS=$MAX_DIGITS

if [ -n "$1" ]; then
  MAX_FILES=$1
  if [ -n "$2" ]; then
    NUMBER_OF_DIGITS=$2
  fi  
fi

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

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

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

dotFile='dot.png'
minusFile='minus.png'

signPos='+156+198'

digitPos[1]='+197+198'
digitPos[2]='+238+198'
digitPos[3]='+279+198'
digitPos[4]='+320+198'
digitPos[5]='+361+198'

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

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

i=$((RANDOM % 2)) # random (0|1=''|-)
if [ $i == 0 ]; then
  signFile=$emptyCanvas
  SIGN=''
else
  signFile=$minusFile
  SIGN='-'
fi 

DPR=$((RANDOM % $NUMBER_OF_DIGITS + 1)) # random dot position (1..$NUMBER_OF_DIGITS)
for (( i=1; i<=$MAX_DIGITS; i++ )); do 
  DNR[$i]=$((RANDOM % 10)) # random digit number (0..9)
  if [ $DPR == $i ]; then
    dotFile[$i]="$dotFile"
    DOT[$i]="." # dot character
  else
    dotFile[$i]=$emptyCanvas
    DOT[$i]=""
  fi  
done

value="$SIGN" 

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


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

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

exit