You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

86 lines
1.7 KiB

  1. // go-qrcode
  2. // Copyright 2014 Tom Harwood
  3. package main
  4. import (
  5. "flag"
  6. "fmt"
  7. "os"
  8. "strings"
  9. qrcode "github.com/skip2/go-qrcode"
  10. )
  11. func main() {
  12. outFile := flag.String("o", "", "out PNG file prefix, empty for stdout")
  13. size := flag.Int("s", 256, "image size (pixel)")
  14. textArt := flag.Bool("t", false, "print as text-art on stdout")
  15. negative := flag.Bool("i", false, "invert black and white")
  16. flag.Usage = func() {
  17. fmt.Fprintf(os.Stderr, `qrcode -- QR Code encoder in Go
  18. https://github.com/skip2/go-qrcode
  19. Flags:
  20. `)
  21. flag.PrintDefaults()
  22. fmt.Fprintf(os.Stderr, `
  23. Usage:
  24. 1. Arguments except for flags are joined by " " and used to generate QR code.
  25. Default output is STDOUT, pipe to imagemagick command "display" to display
  26. on any X server.
  27. qrcode hello word | display
  28. 2. Save to file if "display" not available:
  29. qrcode "homepage: https://github.com/skip2/go-qrcode" > out.png
  30. `)
  31. }
  32. flag.Parse()
  33. if len(flag.Args()) == 0 {
  34. flag.Usage()
  35. checkError(fmt.Errorf("Error: no content given"))
  36. }
  37. content := strings.Join(flag.Args(), " ")
  38. var err error
  39. var q *qrcode.QRCode
  40. q, err = qrcode.New(content, qrcode.Highest)
  41. checkError(err)
  42. if *textArt {
  43. art := q.ToString(*negative)
  44. fmt.Println(art)
  45. return
  46. }
  47. if *negative {
  48. q.ForegroundColor, q.BackgroundColor = q.BackgroundColor, q.ForegroundColor
  49. }
  50. var png []byte
  51. png, err = q.PNG(*size)
  52. checkError(err)
  53. if *outFile == "" {
  54. os.Stdout.Write(png)
  55. } else {
  56. var fh *os.File
  57. fh, err = os.Create(*outFile + ".png")
  58. checkError(err)
  59. defer fh.Close()
  60. fh.Write(png)
  61. }
  62. }
  63. func checkError(err error) {
  64. if err != nil {
  65. fmt.Fprintf(os.Stderr, "%s\n", err)
  66. os.Exit(1)
  67. }
  68. }