![자막이 포함된 QR 코드를 생성하려면 어떻게 해야 하나요?](https://rvso.com/image/192246/%EC%9E%90%EB%A7%89%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20QR%20%EC%BD%94%EB%93%9C%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%98%EB%82%98%EC%9A%94%3F.png)
수천 개의 간단한 ID(1234, 1235, 1236, ...)로 구성된 qr 코드를 생성해야 하며 이를 사람이 읽을 수 있도록 만들고 싶습니다. qrencode
qr 코드를 생성하는 정말 멋진 도구이지만 거기에 자막을 추가할 수 있는 방법은 없습니다.
어떤 아이디어가 있나요?
답변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
구출해 드립니다:
- QR 코드 생성
qrencode
(출력 PNG, SVG는 변환과 함께 작동하지 않는 것 같습니다) - 문자열에서 png 이미지 생성
convert
- 변환으로 이미지 추가
이에 대한 스크립트는 다음과 같습니다.
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"
에 텍스트가 배치됩니다.