Browse Source

Extra flag -t to print as 2D char map on STDOUT.

Deleplace 8 years ago
parent
commit
4bd85f5c1a
1 changed files with 26 additions and 1 deletions
  1. 26 1
      qrcode/main.go

+ 26 - 1
qrcode/main.go

@@ -4,6 +4,7 @@
 package main
 
 import (
+	"bytes"
 	"flag"
 	"fmt"
 	"os"
@@ -15,6 +16,7 @@ import (
 func main() {
 	outFile := flag.String("o", "", "out PNG file prefix, empty for stdout")
 	size := flag.Int("s", 256, "image size (pixel)")
+	textArt := flag.Bool("t", false, "print as text-art on stdout")
 	flag.Usage = func() {
 		fmt.Fprintf(os.Stderr, `qrcode -- QR Code encoder in Go
 https://github.com/skip2/go-qrcode
@@ -53,6 +55,12 @@ Usage:
 	q, err = qrcode.New(content, qrcode.Highest)
 	checkError(err)
 
+	if *textArt {
+		art := qr2String(q, true)
+		fmt.Println(art)
+		return
+	}
+
 	var png []byte
 	png, err = q.PNG(*size)
 	checkError(err)
@@ -71,6 +79,23 @@ Usage:
 func checkError(err error) {
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "%s\n", err)
-		os.Exit(0)
+		os.Exit(1)
+	}
+}
+
+// qr2String produces a multi-line string that forms a QR-code image.
+func qr2String(qr *qrcode.QRCode, inverseColor bool) string {
+	bits := qr.Bitmap()
+	var buf bytes.Buffer
+	for y := range bits {
+		for x := range bits[y] {
+			if bits[y][x] != inverseColor {
+				buf.WriteString("  ")
+			} else {
+				buf.WriteString("■■")
+			}
+		}
+		buf.WriteString("\n")
 	}
+	return buf.String()
 }