- reboot81
- Wisserbesser ●
- Uddevalla
Jag vill kunna avkoda QR-koder från datorns skärm på ett smidigt sätt.
zbarimg qr.png
mha zbar fixar det från en bildfil, finns det fler lösningar?
Inbyggt i macOS?
Fota av koden med iPhone, fast man behöver inte ta en bid, bara håll den gula ramen så den täcker qr-koden.
Jag hittar ingen Quick Look plugin för QR-koder. Men det borde gå att bygga en Folder Watch med Automator (shell-script till zbar). Och sen aktivera den för vald mapp med Tjänster > Inställningar för mappkommandon….
Vid googling dyker zbar och qr-journal upp hela tiden.
https://formulae.brew.sh/cask/qr-journal
Jag hittar ingen Quick Look plugin för QR-koder. Men det borde gå att bygga en Folder Watch med Automator (shell-script till zbar). Och sen aktivera den för vald mapp med Tjänster > Inställningar för mappkommandon….
Vid googling dyker zbar och qr-journal upp hela tiden.
https://formulae.brew.sh/cask/qr-journal
Jag kanske eller troligen missuppfatta, vad är det du vill göra egentligen?
Jag kanske eller troligen missuppfatta, vad är det du vill göra egentligen?
Japp det gjorde du
Jag vill avkoda en qr-kod på datorn.
Ni som kör 2FA med 1Password vet vad jag menar.
Att googla på ämnet slutar endast i ”appar för ios som kan scanna qr”.
Japp det gjorde du
Jag vill avkoda en qr-kod på datorn.
Ni som kör 2FA med 1Password vet vad jag menar.
Att googla på ämnet slutar endast i ”appar för ios som kan scanna qr”.
Fattar inte ett dugg
Ser du QR-koden på skärmen?
Jag har labbat lite. Det fungerar nästan, men något är fel. Listan är tom.
Kanske kan någon här se felet. Jag har inte mer tid just nu.
Automator mappkommando
Överför data: som argument
for f in "$@" do if [[ "$f" = *.png ]]; then zbarimg -q --raw $(dirname "$f")/"$f" >> $(dirname "$1")/qrcodes.txt fi done
Att skicka output till en textfil är endast ett enkelt exempel.
Jag har labbat lite. Det fungerar nästan, men något är fel. Listan är tom.
Automator mappkommando
Överför data: som argument
for f in "$@" do if [[ "$f" = *.png ]]; then zbarimg -q --raw $(dirname "$f")/"$f" >> $(dirname "$1")/qrcodes.txt fi done
varför använder du $(dirname "$f")/"$f"? Om du får hela sökvägen räcker det ju med "$f"
Sen antar jag att du vill skicka till en fil som heter qrcodes.txt i samma mapp? Behöver du verkligen specificera en mapp då (jag vet inte riktigt hur Automator fungerar)? Räcker inte >> qrcodes.txt?
Jag tror inte heller att ditt sätt att få fram suffix fungerar som du tänkt dig. Jag hade gjort något liknande detta: "${f##*.}" = "png" för att jämföra.
varför använder du $(dirname "$f")/"$f"? Om du får hela sökvägen räcker det ju med "$f"
Sen antar jag att du vill skicka till en fil som heter qrcodes.txt i samma mapp? Behöver du verkligen specificera en mapp då (jag vet inte riktigt hur Automator fungerar)? Räcker inte >> qrcodes.txt?
Med endast ">> qrcodes.txt" så hamnar textilen i ~/. Du tor väl inte att jag lägger till en massa extra för skoj skull?
Med endast ">> qrcodes.txt" så hamnar textilen i ~/. Du tor väl inte att jag lägger till en massa extra för skoj skull?
Ah, ok! Har aldrig använt Automator på riktigt
Jag testade att göra ett snabbt skript och det verkar fungera rätt bra. Dra och släpp ett gäng pnger i en mapp kallad qrcodes (eller vad man nu vill kalla mappen) och få resultatet i urklipp. Jag tror att problemet du har är att /usr/local/bin inte ingår i standard PATH.
Skriptet innehåller följande (syns inte i skärmdumpen):
COPY=""
for f in "$@"
do
COPY+=$(/usr/local/bin/zbarimg -q --raw "$f")
echo "$f"
done
echo -n ${COPY} | pbcopy
Alla pnger som släpps skickas till papperskorgen efter behandling. Vill man kan man ju utöka till fler filändelser.
Tack för input @suddgummi !
Smart att kopiera till PasteBoard. Eller, det är i alla fall vad jag tror att det gör.
Jag är inte så van vid Bash script. Skulle du kunna förklara lite mer ingående hur ditt fungerar?
Naturligtvis erbjöd Automator problem med PATH. Sedan var nästa fallgrop avsaknad av "shopt -s extglob" för att kunna expandera[?] en matris[?] med flera filformats suffix.
Nu funkar mitt script även med Automator:
shopt -s extglob for f in "$@" do if [[ "$f" = *.@(jpg|jpeg|jfif|tif|tiff|gif|bmp|png) ]] ; then /usr/local/bin/zbarimg -q --raw "$f" >> $(dirname "$1")/qrcodes.txt fi done
Tack för input @suddgummi !
Smart att kopiera till PasteBoard. Eller, det är i alla fall vad jag tror att det gör.
Jag är inte så van vid Bash script. Skulle du kunna förklara lite mer ingående hur ditt fungerar?
Här är skriptet med kommentarer (fler än jag tror du behöver men jag tänkte vara övertydlig om nån annan är nyfiken)
COPY="" # Nolla en variabel for f in "$@" # Loopa genom alla filer som skickas till skriptet do COPY+=$(/usr/local/bin/zbarimg -q --raw "$f") # Läs ut text från QR-kod och konkatenera med föregående värde i COPY echo "$f" # Skicka ut filnamnet till nästa steg i automator done echo -n ${COPY} | pbcopy # Skicka COPY till urklipp/pasteboard
Naturligtvis erbjöd Automator problem med PATH. Sedan var nästa fallgrop avsaknad av "shopt -s extglob" för att kunna expandera[?] en matris[?] med flera filformats suffix.
Jag har inte använt *.@ och kan inte finna det i dokumentationen. Om det är en Bash-only lösning bör man nog överväga att göra en annan lösning, eftersom Apple antagligen kommer att sluta skicka med Bash snart (till förmån för Zsh). Jag använder Finder för att hitta de filer som jag vill processa istället.
Om du fortfarande vill använda Bash skulle du kunna testa med ett regex-uttryck istället (eftersom du använder [[), se http://mywiki.wooledge.org/BashFAQ/031
…
Jag har inte använt *.@ och kan inte finna det i dokumentationen. Om det är en Bash-only lösning bör man nog överväga att göra en annan lösning, eftersom Apple antagligen kommer att sluta skicka med Bash snart (till förmån för Zsh). Jag använder Finder för att hitta de filer som jag vill processa istället.
Om du fortfarande vill använda Bash skulle du kunna testa med ett regex-uttryck istället (eftersom du använder [[), se http://mywiki.wooledge.org/BashFAQ/031
Nu har jag labbat lite.
Din variant använder "append"/bifoga, dvs plustecken efter variabeln COPY, inom for-loopen. Vilket medför att COPY redan har alla strängar, och därmed gör det ingen skillnad att skicka ut resultatet med echo. Detta ger samma resultat:
for f in "$@" do COPY+=$(/usr/local/bin/zbarimg -q --raw "$f") done echo -n ${COPY} | pbcopy
Synd att strängarna sammanfogas helt utan avdelare, ex. med komma.
Det kan det åtgärdas med: COPY+="$(/usr/local/bin/zbarimg -q --raw "$f"),"
Och sedan tas sista kommat bort med: echo -n ${COPY%,} | pbcopy
Alltså kan hela skriptet skrivas:
for f in "$@" do COPY+="$(/usr/local/bin/zbarimg -q --raw "$f")," done echo -n ${COPY%,} | pbcopy
Du kan ha rätt i att min tidigare lösning är mer bash-beroende. Jag är inte så djup insatt i detta. Tydligen kallas metoden Glob eller "Extended Globbing":
http://mywiki.wooledge.org/glob#nullglob
https://www.linuxjournal.com/content/bash-ext...
"@(pattern-list) Matches one of the given patterns"
Nu har jag labbat lite.
Din variant använder "append"/bifoga, dvs plustecken efter variabeln COPY, inom for-loopen. Vilket medför att COPY redan har alla strängar, och därmed gör det ingen skillnad att skicka ut resultatet med echo. Detta ger samma resultat:
Nej, det är inte riktigt. Skickar jag inte ut filnamnet i loopen så fungerar inte nästa steg i Automator för mig, att skicka den processade filen till papperskorgen.
Det är alltså inte innehållet i filen som skickas ut till stdout utan själva filnamnet som kan vidarebehandlas i nästa steg.
Synd att strängarna sammanfogas helt utan avdelare, ex. med komma.
Det kan det åtgärdas med: COPY+="$(/usr/local/bin/zbarimg -q --raw "$f"),"
Och sedan tas sista kommat bort med: echo -n ${COPY%,} | pbcopy
Alltså kan hela skriptet skrivas:
for f in "$@" do COPY+="$(/usr/local/bin/zbarimg -q --raw "$f")," done echo -n ${COPY%,} | pbcopy
Absolut, avdelare kan vara käckt att ha, men som sagt fungerar inte hela skriptet när du tar bort echo i loopen. Om man inte vill att filen tas bort automatiskt via automator går det ju bra att göra så. Eller om man inte vill att den ska placeras i papperskorgen kan man ta väck den direkt med rm i skriptet.
Men "problemet" med en avdelare är att det kan vara så att du har ett komma i QR-koden. Hur ska man hantera det? Mig veterligen är en separator ingenting som QR reglerar och det går utmärkt att lägga in ett komma in en sträng och QR-koda den. Samma problem uppstår ju även med lösningen att skicka koden till en fil. Radbrytningar är ju också okej att QR-koda, så hur håller man isär vilken fil som gav vilket resultat? Man skulle kunna skapa en fil per QR-bild (typ kalla den filnamn.qr via typ ${f%.*}.qr).
Sen finns det " inne i strängen omgiven av ". Det ser inte snyggt ut och är inte heller nödvändigt. Går lika bra med COPY+=$(/usr/local/bin/zbarimg -q --raw "$f"),
Ett tips för att ta bort sista tecken är att göra ${COPY%?} om du inte vill hålla reda på vilket tecken du använde som avdelare (du behöver alltså bara ändra på ett ställe om du vill ändra avdelare).
Du kan ha rätt i att min tidigare lösning är mer bash-beroende. Jag är inte så djup insatt i detta. Tydligen kallas metoden Glob eller "Extended Globbing":
http://mywiki.wooledge.org/glob#nullglob
https://www.linuxjournal.com/content/bash-ext...
"@(pattern-list) Matches one of the given patterns"
Ah, då jämför du inte filändelser, utan om filnamnet finns. Du får en lista med filer att jämföra med (de som matchar de filändelserna som du har specificerat). Jag får inte det att fungera i zsh (det kanske är nån inställning).
Nej, det är inte riktigt. Skickar jag inte ut filnamnet i loopen så fungerar inte nästa steg i Automator för mig, att skicka den processade filen till papperskorgen.
…
Man skulle kunna skapa en fil per QR-bild (typ kalla den filnamn.qr via typ ${f%.*}.qr).
Ett tips för att ta bort sista tecken är att göra ${COPY%?} om du inte vill hålla reda på vilket tecken du använde som avdelare (du behöver alltså bara ändra på ett ställe om du vill ändra avdelare).
…
Bra input igen!
Ah! Då förstår jag varför du använde echo-ut. Jag hade ingen "Flytta till Papperskorgen" i min Automator. Så det gjorde ingen skillnad, jag undrade faktiskt vart filnamnet tog vägen och vad det användes till i ditt skript
Elegant med ${COPY%?}. Kan den även hantera mellanslag bra, ex. "; "?
Kanske får man använda en udda separator eller kapsla in med citattecken och använda separator.