![](https://seccdn.libravatar.org/avatar/8b2d54644cef73ce8a48191e9479c86d.jpg?s=120&d=mm&r=g)
Hallo,
Zum Hintergrund des Problems siehe unten.
Kurz: ImageMagick draw rectangle Kommando dynamisch in ein convert
einbauen.
Ich habe zum Ueben mein Script mal drastisch reduziert auf folgendes
fehlerhafte Script:
--- snippety snip ---
#!/bin/bash
set -x
function rect
{
echo "-stroke black -strokewidth 3 -draw 'rectangle 1,2 5,6'"
}
convert -size 10x10 xc:transparent -fill transparent \
$(
rect
) \
out.png
--- snappety snap ---
Aber das geht ja schief, Der Parameter zu -draw wird in seine
Einzelteile zerlegt. Also habe ich mir mit folgender Kruecke beholfen:
--- snippety snip ---
#!/bin/bash
set -x
function rect
{
echo -e "-stroke\nblack\n-strokewidth\n3\n-draw\nrectangle 1,2 5,6"
}
IFS='
'
convert -size 10x10 xc:transparent -fill transparent \
$(
rect
) \
out.png
--- snappety snap ---
Aber das ist ziemlich mistig. Ab dem Setzen von IFS habe ich nur noch
Probleme am Hals, wenn ich noch weitere Dinge anstellen will. Aber ich
komme einfach nicht drauf wie ich das mit der bash eleganter loesen
koennte. Ich habe beinahe alle Kombinationen von Escapes und
Hochkommas ausprobiert, bisher ohne Erfolg.
Die Function rect berechnet im richtigen Script natuerlich die x und y
aus den verschiedenen EXIF-Daten der Kamera.
Hintergrund lang: ein Script um mit ImageMagick die AF-Sensoren wie
sie im EXIF stehen ueber ein Bild zu legen. In digikam ist das erst
ein Enhancement Request.
Hierzu wird der IM Befehl
-draw "rectangle $x0,$y0 $x1,$y1"
benutzt. Wichtig hierbei, das Argument zu -draw ist eines, nicht
mehrere einzelne. Nun aber hat so eine DSLR ja viele AF-Sensoren,
manche davon genutzt. D.h. ich habe eine Funktion mit dem Namen
"rect", deren Ausgabe in das IM convert-Kommando eingebaut werden soll
um mehrere Rechtecke zu zeichnen (wie z.B. im Canon DPP oder dem TFT
der Kamera selbst).
function rect
{
# after some mathematics
echo "-stroke $5 -strokewidth $6 -draw 'rectangle $x0,$y0 $x1,$y1'"
}
... exiftool Output parsen und in Variablen mit dem Namen der Tags
ablegen ...
convert ... \
-fill transparent \
$(
...
for i in "${AFPointsInFocus[@]}"
do
rect ${AFAreaXPositions[$i]