package qrcode // 生成登录二维码图片 import ( "errors" "image" "image/jpeg" "image/png" "os" "path/filepath" "strings" "github.com/boombuler/barcode" "github.com/boombuler/barcode/qr" ) func SaveJpegFile(filePath, content string, edges ...int) error { edgeLen := 300 if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { edgeLen = edges[0] } img, _ := qr.Encode(content, qr.L, qr.Unicode) img, _ = barcode.Scale(img, edgeLen, edgeLen) return writeFile(filePath, img, "jpg") } func SavePngFile(filePath, content string, edges ...int) error { edgeLen := 300 if len(edges) > 0 && edges[0] > 100 && edges[0] < 2000 { edgeLen = edges[0] } img, _ := qr.Encode(content, qr.L, qr.Unicode) img, _ = barcode.Scale(img, edgeLen, edgeLen) return writeFile(filePath, img, "png") } func writeFile(filePath string, img image.Image, format string) error { if err := createDir(filePath); err != nil { return err } file, err := os.Create(filePath) defer file.Close() if err != nil { return err } switch strings.ToLower(format) { case "png": err = png.Encode(file, img) break case "jpg": err = jpeg.Encode(file, img, nil) default: return errors.New("format not accept") } if err != nil { return err } return nil } func createDir(filePath string) error { var err error // filePath, _ = filepath.Abs(filePath) dirPath := filepath.Dir(filePath) dirInfo, err := os.Stat(dirPath) if err != nil { if !os.IsExist(err) { err = os.MkdirAll(dirPath, 0777) if err != nil { return err } } else { return err } } else { if dirInfo.IsDir() { return nil } return errors.New("directory is a file") } return nil }