staging.inyokaproject.org

ImageMagick: Variablen im Shell-Skript übergeben schlägt (manchmal) fehl

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

UsualRedFox

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

Ich habe mir ein kleines Shell-Skript geschrieben, dass mir aus einem Ausgangsfoto zwei quadratische Bilder macht und diese mit diversen Textelementen versieht. Die Textelemente werden im Vorfeld eingegeben und dann mit ImageMagick auf die Bilder geschrieben.

An zwei Stellen funktioniert mein Skript noch nicht reibungslos und ich würde gerne um Hilfe bitten.

1) Übergabe eines ermittelten Farbwertes an ImageMagick (...)

1
2
3
4
5
farbe="$(./dominantcolor resize.png)"
echo $farbe #ergibt den Korrekten wert, z.B. als #995F26

convert resize.png -alpha set -fill '"$farbe"' -draw 'color 0,0 reset' -gravity center -crop 1080x1080+0+0 farblayer.png
#Ein Farb-Layer soll entstehen, der aus der dominanten Farbe des Ausgangsbildes besteht.

Problem: Die Farbe wird so nicht richtig án Imagemagick weitergegeben. Gebe ich den Wert #995F26 händisch ein, funktioniert es wie gewollt.

2) Variable vor der Verarbeitung verändern... nur wie?

(...)

1
2
3
4
5
6
7
read -p "Kurztext einfügen: " kurztext
echo Kurztext: $kurztext

(...)

convert p2plustemp.png -background transparent -fill white -font FreeSans-Fett -size 970x890 caption:\\"$kurztext" -gravity North -geometry +0+25 -composite "$ausgabename"_2.png
# Kurztext wird auf das Bild geschrieben und als Beispielbild_2.png abgespeichert.

Der obige Text funktioniert. Er wird wie gewünscht an der richtigen Position auf das Bild geschrieben. Was ich gerne hätte wäre jedoch, dass dem Text noch "»" vorangestellt, und "«" und "[Weitere Info in der Beschreibung]" nachgestellt wird. Quasi:

»Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum« [Weitere Info...]

Meine (fehlgeschlagene) Lösungsstrategie:

1
2
3
#kurztext=\'« "$kurztext" » [Weitere Info in der Beschreibung]\' # auch ${kurztext} wurde ausprobiert.

convert p2plustemp.png -background transparent -fill white -font FreeSans-Fett -size 970x890 caption:\\"$kurztext" -gravity North -geometry +0+25 -composite "$ausgabename"_2.png

Das führt leider nicht zum Erfolg, sondern zu diversen Fehlermeldungen.

Anmerkung: Der Hintergedanke war, die Variable einfach im Nachhinein zu manipulieren. Folgender Test hat funktioniert:

1
2
3
kurztext=hallo
kurztext="« $kurztext » [Weitere Info in der Beschreibung]"
echo $kurztext # Ausgabe: « hallo » [Weitere Info in der Beschreibung]

Ich vermute, dass es einfach an der Formatierung hapert. Aber leider bin ich ein blutiger Anfänger was die Shell angeht und ich kann nicht mehr tun, als alle möglichen Kombinationen von "\" "'" und Co auszuprobieren.

Kann mir jemand helfen, die Probleme auszubügeln?

Vielen Dank!!

PS: Ich sende gerne das vollständige Skript oder die Fehlermeldungen nach, falls das hilft.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Zu den Problemen

  1. Die einfachen Anführungsstriche in Zeile 4 sind sicher falsch, weil sie die Parameter Expansion von $farbe verhindern: -fill '"$farbe"'

  2. Ich würde nicht den Variableninhalt ändern sondern die Kommandozeile - zumindest, wenn das die einzige Verwendung ist: caption:\\"$kurztext" ⇒ caption:\\"»${kurztext}« [Weitere Info in der Beschreibung]"; es geht auch "caption:\\»${kurztext}« [Weitere Info in der Beschreibung]"

UsualRedFox

(Themenstarter)

Anmeldungsdatum:
23. Juli 2017

Beiträge: 95

(rklm schrieb:

Zu den Problemen

  1. Die einfachen Anführungsstriche in Zeile 4 sind sicher falsch, weil sie die Parameter Expansion von $farbe verhindern: -fill '"$farbe"'

Kannst du mir sagen, was besser funktionieren würde? Mein erster Ansatz war "$farbe", dann habe ich auch $farbe, sowie '$farbe' versucht, leider ohne Erfolg.

1
2
3
4
-fill '"$farbe"' #ergibt nachfolgenden Fehler:

convert-im6.q16: unable to open image `"$farbe"': Datei oder Verzeichnis nicht gefunden @ error/blob.c/OpenBlob/2701.
convert-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/504.

)

  1. Ich würde nicht den Variableninhalt ändern sondern die Kommandozeile - zumindest, wenn das die einzige Verwendung ist: caption:\\"$kurztext" ⇒ caption:\\"»${kurztext}« [Weitere Info in der Beschreibung]"; es geht auch "caption:\\»${kurztext}« [Weitere Info in der Beschreibung]"

Probiere ich gleich aus und gebe dann Rückmeldung. Vielen Dank erstmal.

Ich habe die Fehler nun ausbügeln können:

1
2
3
4
5
6
7
8

farbe="$(./dominantcolor resize.png)"

convert resize.png -alpha set -fill "$farbe" -draw 'color 0,0 reset' -gravity center -crop 1080x1080+0+0 farblayer.png

...

convert p2plustemp.png -background transparent -fill white -font FreeSans-Fett -size 970x890 caption:\\"«$kurztext» \n\n\[Link in Bio]" -gravity Center -geometry +0+25 -composite "$ausgabename"_2.png

Dachte zwar, dass ich das probiert hatte, aber egal. Vielen Dank für die Hilfe!

Antworten |