Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

132 строки
2.9 KiB

4 лет назад
package common
import (
"bytes"
4 лет назад
"fmt"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/qrcode"
goQrcode "github.com/skip2/go-qrcode"
4 лет назад
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
4 лет назад
"image"
4 лет назад
"io/ioutil"
"math/rand"
"os"
"os/exec"
"runtime"
"strconv"
"time"
)
func Rand(min, max int) int {
if min > max {
panic("min: min cannot be greater than max")
}
if int31 := 1<<31 - 1; max > int31 {
panic("max: max can not be greater than " + strconv.Itoa(int31))
}
if min == max {
return min
}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
return r.Intn(max+1-min) + min
}
func GbkToUtf8(s []byte) ([]byte, error) {
reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
d, e := ioutil.ReadAll(reader)
if e != nil {
return nil, e
}
return d, nil
}
func Utf8ToGbk(s []byte) ([]byte, error) {
reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewEncoder())
d, e := ioutil.ReadAll(reader)
if e != nil {
return nil, e
}
return d, nil
}
func NewRandStr(length int) string {
4 лет назад
s := []string{
4 лет назад
"a", "b", "c", "d", "e", "f",
"g", "h", "i", "j", "k", "l",
"m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x",
"y", "z", "A", "B", "C", "D",
"E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z",
}
4 лет назад
str := ""
for i := 1; i <= length; i++ {
4 лет назад
r := rand.New(rand.NewSource(time.Now().UnixNano()))
4 лет назад
str += s[r.Intn(len(s)-1)]
4 лет назад
}
return str
}
4 лет назад
func Substr(s string, start, end int) string {
strRune := []rune(s)
if start == -1 {
4 лет назад
return string(strRune[:end])
}
4 лет назад
if end == -1 {
4 лет назад
return string(strRune[start:])
}
return string(strRune[start:end])
}
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
func Exists(path string) bool {
_, err := os.Stat(path)
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
4 лет назад
func OpenImage(qrPath string) {
if runtime.GOOS == "windows" {//windows
cmd := exec.Command("cmd", "/c", "rundll32.exe", "C:\\Windows\\System32\\shimgvw.dll,ImageView_FullscreenA", qrPath)
4 лет назад
_ = cmd.Start()
//扫码后二维码自动删除,自动关闭照片查看器
go func() {
for {
time.Sleep(time.Duration(1) * time.Second)
if !Exists(qrPath) {
_ = exec.Command("taskkill", "/F", "/T", "/PID", fmt.Sprint(cmd.Process.Pid)).Run()
break
}
}
}()
4 лет назад
}else if runtime.GOOS == "darwin" {//Macos
cmd := exec.Command("open", qrPath)
_ = cmd.Start()
}else{
//linux或者其他系统
file, _ := os.Open(qrPath)
img, _, _ := image.Decode(file)
bmp, _ := gozxing.NewBinaryBitmapFromImage(img)
qrReader := qrcode.NewQRCodeReader()
res, _ := qrReader.Decode(bmp, nil)
//输出控制台
qr, _ := goQrcode.New(res.String(), goQrcode.High)
fmt.Println(qr.ToSmallString(false))
4 лет назад
}
4 лет назад
}