QR-kod läsare

Tråden skapades och har fått 20 svar. Det senaste inlägget skrevs .
1
  • Wisserbesser
  • Uddevalla
  • 2020-06-07 22:37

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?

  • Medlem
  • Göteborg
  • 2020-06-07 23:43

Berätta mer. Hur vill använda detta?

Ursprungligen av reboot81:

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.

  • Medlem
  • Göteborg
  • 2020-06-08 00:37

En QR-skanner plugin till Quick Look vore smidigt.

  • Medlem
  • Göteborg
  • 2020-06-08 13:00

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

Ursprungligen av iSweden:

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?

  • Wisserbesser
  • Uddevalla
  • 2020-06-08 17:26
Ursprungligen av CekariYH:

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”.

Ursprungligen av reboot81:

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?

  • Medlem
  • Göteborg
  • 2020-06-08 22:50

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 "[email protected]"
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.

Senast redigerat 2020-06-08 23:07
Ursprungligen av iSweden:

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 "[email protected]"
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.

  • Medlem
  • Göteborg
  • 2020-06-08 23:12
Ursprungligen av suddgummi:

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?

  • Medlem
  • Göteborg
  • 2020-06-08 23:36

Detta funkar i CLI, men inte i Automator:

#!/usr/bin/env bash

shopt -s nullglob

for f in *.{jpg,jpeg,jfif,tif,tiff,gif,bmp,png}
do
        zbarimg -q --raw $(dirname "$1")/"$f" >> $(dirname "$1")/qrcodes.txt
done

Wow, är det många QR-koder du behöver läsa in?

Ursprungligen av iSweden:

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):

Citat:

COPY=""
for f in "[email protected]"
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.

  • Medlem
  • Göteborg
  • 2020-06-09 01:00

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 "[email protected]"
do
    if [[ "$f" = *[email protected](jpg|jpeg|jfif|tif|tiff|gif|bmp|png) ]] ; then
        /usr/local/bin/zbarimg -q --raw "$f" >> $(dirname "$1")/qrcodes.txt
    fi
done 
Senast redigerat 2020-06-09 01:11
Ursprungligen av iSweden:

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 "[email protected]"  # 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
Ursprungligen av iSweden:

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 *[email protected] 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

  • Medlem
  • Göteborg
  • 2020-06-10 15:39
Ursprungligen av suddgummi:

Jag har inte använt *[email protected] 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 "[email protected]"
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 "[email protected]"
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"

Senast redigerat 2020-06-10 16:10
  • Medlem
  • Göteborg
  • 2020-06-10 16:04

Om nu inget av dessa bash-skript passar @reboot81 så kanske en lösning med Alfred ligger bättre till:
https://github.com/cj1128/alfred-qrcode-workf...

Ursprungligen av iSweden:

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.

Ursprungligen av iSweden:

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 "[email protected]"
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).

Ursprungligen av iSweden:

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).

  • Medlem
  • Göteborg
  • 2020-06-10 20:37
Ursprungligen av suddgummi:

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.

  • Medlem
  • Göteborg
  • 2020-06-10 20:42

Jag kan inte mycket om zsh. Hittade dock detta om Glob och zsh:
setopt extended_glob
https://www.techrepublic.com/article/globbing...

1
Bevaka tråden