자막이 포함된 QR 코드를 생성하려면 어떻게 해야 하나요?

자막이 포함된 QR 코드를 생성하려면 어떻게 해야 하나요?

수천 개의 간단한 ID(1234, 1235, 1236, ...)로 구성된 qr 코드를 생성해야 하며 이를 사람이 읽을 수 있도록 만들고 싶습니다. qrencodeqr 코드를 생성하는 정말 멋진 도구이지만 거기에 자막을 추가할 수 있는 방법은 없습니다.

어떤 아이디어가 있나요?

답변1

텍스트가 포함된 이미지를 만들고 이를 이미지에 추가합니다.

#!/bin/bash

txt="$1"
qrencode -o "$txt".png "$txt"

convert  -pointsize 36 "label:$txt" "$txt.gif"
convert -append "$txt".png "$txt.gif" "$txt.total.gif"

답변2

Imagemagics가 convert구출해 드립니다:

  1. QR 코드 생성 qrencode(출력 PNG, SVG는 변환과 함께 작동하지 않는 것 같습니다)
  2. 문자열에서 png 이미지 생성convert
  3. 변환으로 이미지 추가

이에 대한 스크립트는 다음과 같습니다.

for i in $(cat ../input.csv); do 
  qrencode $i -t png -l H -s 10 -o $i.q.png;
  convert -size 290x40 xc:white -pointsize 34 -gravity center -font /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf -draw "text 0,0 '$i'" $i.s.png; 
 convert -append $i.q.png $i.s.png $i.png; rm $i.q.png; rm $i.s.png; 
 echo $i; 
done;

DejaVuSansMono.ttf에는 0에 점이 있으므로 쉽게 읽을 수 있습니다. 다른 항목도 있을 수 있습니다. 1과 작은 L과 평소 용의자도 잘 식별됩니다.

답변3

svg 형식을 유지하려면 xml을 편집하여 <text>파일 끝에 새 요소를 추가하는 것은 그리 어렵지 않은 것 같습니다. 나는 표준 방식으로 이 작업을 수행할 만큼 svg를 잘 모르지만 svg 편집기를 사용하여 텍스트 줄을 추가할 때 파일이 어떻게 보이는지 살펴보면 다음 awk스크립트가 제공한 예제에 충분할 수 있습니다.

i=1234
qrencode "$i" -t svg -l H -s 10 -o "$i.q.svg.orig"
awk <"$i.q.svg.orig" >"$i.q.svg" -v txt="$i" '
/<svg /{ match($0,"height=\"([0-9.]+)",grp)
    ht = grp[1]*1.1
    ht = "height=\"" ht
    sub("height=\"([0-9.]+)",ht,$0)
    match($0,"viewBox=\"0 0 ([0-9]+) ([0-9]+)",grp)
    vb = int(grp[2]*1.1+.5)
    x = int(grp[1]/2+.5)
    y = grp[2]+1
    vb = "viewBox=\"0 0 " grp[1] " " vb
    sub("viewBox=\"0 0 ([0-9]+) ([0-9]+)",vb,$0)
}
/<rect x="0" /{
    match($0,"height=\"([0-9.]+)",grp)
    ht = int(grp[1]*1.1+.5)
    ht = "height=\"" ht
    sub("height=\"([0-9.]+)",ht,$0)
}
/<\/svg>/{
    printf "  <text font-family=\"Helvetica, sans-serif\" font-size=\"6\" stroke-width=\"0\" text-anchor=\"middle\" x=\"%d\" y=\"%d\" xml:space=\"preserve\">%s</text>",x,y,txt
}
{print}
'

이것은 좀 더 일반적이기 때문에 실제로 필요한 것보다 더 복잡합니다.

초기값을 취하고 <svg width="10.23cm" height="10.23cm" viewBox="0 0 29 29" ...height 및 4번째 viewBox 값을 10% 확대하여 가 됩니다 <svg width="10.23cm" height="11.23cm" viewBox="0 0 29 33" ....

그런 다음 배경의 흰색 직사각형을 가져와 높이를 에서 까지 비슷하게 늘 <rect ... height="29"립니다 <rect ... height="33".

마지막으로 <text...>viewBox에서 찾은 값을 x 및 y 위치로 사용하여 끝 앞에 줄을 추가합니다. 이 좌표의 중심 text-anchor="middle"에 텍스트가 배치됩니다.

관련 정보