main.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. flag.Usage = func() {
  15. fmt.Fprintf(os.Stderr, `qrcode -- QR Code encoder in Go
  16. https://github.com/skip2/go-qrcode
  17. Flags:
  18. `)
  19. flag.PrintDefaults()
  20. fmt.Fprintf(os.Stderr, `
  21. Usage:
  22. 1. Arguments except for flags are joined by " " and used to generate QR code.
  23. Default output is STDOUT, pipe to imagemagick command "display" to display
  24. on any X server.
  25. qrcode hello word | display
  26. 2. Save to file if "display" not available:
  27. qrcode "homepage: https://github.com/skip2/go-qrcode" > out.png
  28. `)
  29. }
  30. flag.Parse()
  31. if *size <= 0 {
  32. checkError(fmt.Errorf("Error: value of -s should > 0"))
  33. }
  34. if len(flag.Args()) == 0 {
  35. flag.Usage()
  36. checkError(fmt.Errorf("Error: no content given"))
  37. }
  38. content := strings.Join(flag.Args(), " ")
  39. var err error
  40. var q *qrcode.QRCode
  41. q, err = qrcode.New(content, qrcode.Highest)
  42. checkError(err)
  43. var png []byte
  44. png, err = q.PNG(*size)
  45. checkError(err)
  46. if *outFile == "" {
  47. os.Stdout.Write(png)
  48. } else {
  49. var fh *os.File
  50. fh, err = os.Create(*outFile + ".png")
  51. checkError(err)
  52. defer fh.Close()
  53. fh.Write(png)
  54. }
  55. }
  56. func checkError(err error) {
  57. if err != nil {
  58. fmt.Fprintf(os.Stderr, "%s\n", err)
  59. os.Exit(0)
  60. }
  61. }