qrcode.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // ============================================================================
  2. // qrcode.go — 工具页二维码生成
  3. //
  4. // 用 go-qrcode 把任意字符串生成 PNG 二维码,返回 data URI 供前端预览/下载。
  5. // ============================================================================
  6. package main
  7. import (
  8. "encoding/base64"
  9. "errors"
  10. "strings"
  11. qrcode "github.com/skip2/go-qrcode"
  12. )
  13. // GenerateQRCode 把输入字符串生成 PNG 二维码,返回 data URI 供前端 <img> 直接展示。
  14. // size 为图片边长(像素),<=0 时用默认值 300。
  15. func GenerateQRCode(text string, size int) (string, error) {
  16. text = strings.TrimSpace(text)
  17. if text == "" {
  18. return "", errors.New("请输入要生成二维码的内容")
  19. }
  20. if len(text) > 1000 {
  21. return "", errors.New("内容过长,请控制在 1000 字符以内")
  22. }
  23. if size <= 0 {
  24. size = 300
  25. }
  26. if size < 128 {
  27. size = 128 // 最小尺寸,避免模糊
  28. }
  29. if size > 1024 {
  30. size = 1024 // 最大尺寸
  31. }
  32. png, err := qrcode.Encode(text, qrcode.Medium, size)
  33. if err != nil {
  34. return "", err
  35. }
  36. return "data:image/png;base64," + base64.StdEncoding.EncodeToString(png), nil
  37. }