QR-Codes aus Bildern lesen und den Text anzeigen.

Unter Linux gibt es nicht so viele Möglichkeiten, QR-Codes auszuwerten. Eine Möglichkeit auf der Kommandozeile ist ZBar, leider hat es keine GUI. Was ich will soll per Rechtsklick aus meinem Dateimanager funktionieren und mir anschließend in einem Dialog anzeigen, ob und was zbar gefunden hat.

Endlich mal wieder ein Bash-Script… Ein paar Dinge sind Voraussetzung: Als erstes braucht es ZBar zum Auslesen der QR-Codes. Mit Zenity kann man grafische Dialoge in einem Bash-Script anzeigen. Mehr ist nicht nötig.

Es kann dem Script als Parameter ein oder mehrere Bilder übergeben werden. Eine while-Schleife liest & entfernt die Übergabe-Parameter solange, bis keine mehr da sind. Sollte der ermittelte Code mit http:// beginnen, wird er als Webadresse interpretiert: Der dann folgende Dialog bietet an, ihn im Webbrowser zu öffnen.
#!/bin/bash
# swg, 25.8.2013
#
# Verwendet ZBarImg zum Lesen von QR-Codes aus Bildern.
# der ermittelte Text wird in einem Zenity-Dialog angezeigt, mit einer passenden
# Option zur Verwendung (Webadresse-> im Standard-Browser öffnen
#
# erwartet als Parameter wenigstens eine Bilddatei!
#
if [ ! $# -gt 0 ]; then
echo “Usage: zbarimggtk.sh IMG1.jpg [img2.jpg …]”;
exit;
fi;
while [ $# -gt 0 ] # Solange Parameter da sind…
do
IMG=$1;
if [[ -f $IMG ]]; then # ist der Parameter eine reguläre Datei?
CODE=$(zbarimg -Dq $IMG | sed -e “s/QR-Code://”); # vom zbarimg-Rückgabewert
# “QR-Code:” vorn abschneiden
if [[ -z $CODE ]]; then
zenity –error –text “Kein QR-Code im Bild $IMG gefunden!” &
else
if [ $(echo “$CODE” | grep “http://”) ]; then # wenn Code mit “http://” beginnt,
# ist es eine Webadresse
zenity –forms –title=”Webdresse in $IMG gefunden” \
–separator=”,” \
–text=”Webadresse $CODE öffnen?”;
case $? in
0)
x-www-browser $CODE; # Webadresse im X-Standard-Browser öffnen
;;
1)
# User-Cancel!
;;
-1)
zenity –error –text=”Ein unerwarteter Fehler ist aufgetreten.”;
;;
esac
else # bei einfachem Text nur einen Info-Dialog anzeigen
# (Text ist markier- und kopierbar)
zenity –info –title=”Text gefunden:” –text=”$CODE” &
fi;
fi;
else
zenity –error –text=”Bild $IMG nicht gefunden!” &
fi;
shift; # Vordersten Übergabe-Parameter des Scripts löschen
done

Ich verwende es im Rox-Filer und in Geeqie jeweils im Kontextmenü – ein Rechtsklick aufs Bild und das Script als ausführendes Programm gewählt und ich weiß, was mir der fotografierte QR-Code sagen will…

Hier noch das fertige Script:
Symbol Shellscript zbarimggtk.sh

(swg)