生成二维码

package main

import (
   "bytes"
   "github.com/boombuler/barcode"
   "github.com/boombuler/barcode/qr"
   "image/png"
   "net/http"
   "os"
)

func main() {
   // 演示地址:http://localhost:8080/qrcode.png
   http.HandleFunc("/qrcode.png", func(writer http.ResponseWriter, request *http.Request) {
      content := "PHP是世界上最好の语言" // 二维码内容
      width := 256              // 二维码图片宽度(含边框)
      height := 256             // 二维码图片高度(含边框)

      bc, err := qr.Encode(content, qr.M, qr.Auto)
      if err != nil {
         panic("创建Barcode对象失败:" + err.Error())
      }

      bc, err = barcode.Scale(bc, width, height)
      if err != nil {
         panic("设置二维码图片尺寸失败:" + err.Error())
      }

      buffer := new(bytes.Buffer)
      err = png.Encode(buffer, bc)
      if err != nil {
         panic("生成二维码图片失败:" + err.Error())
      }

      // 直接显示二维码图片
      _, _ = writer.Write(buffer.Bytes())

      // 保存为*.png文件到本地
      file, _ := os.Create("qrcode.png")
      defer func(file *os.File) {
         _ = file.Close()
      }(file)

      err = png.Encode(file, bc)
      if err != nil {
         panic("保存二维码图片失败:" + err.Error())
      }
   })

   // 启动HTTP服务器
   err := http.ListenAndServe(":8080", nil)
   if err != nil {
      panic("启动HTTP服务器失败:" + err.Error())
   }
}

Copyright © 2024 码农人生. All Rights Reserved