Golang 生成带水印的二维码

1、生成一张全黑色的二维码图片:qr2.png

    content := "https://test.com/chengle/html/fabrication/qrcode.html?id="+id
    qrCode, _ := qr.Encode(content, qr.H, qr.Auto)
    //qrCode, _ := qr.Encode("https://test.com/html/app/ios/ewm.html?type=5", qr.H, qr.Auto)
    qrCode,  _ = barcode.Scale(qrCode, 420, 420)
    file, _ := os.Create("qr2.png")
    defer file.Close()
    png.Encode(file, qrCode)

2、打开生成的二维码
    imgb, _ := os.Open("qr2.png")
    img, _ := png.Decode(imgb)

    defer imgb.Close()

3、生成一个带水印的logo

    AddTextToImage()

4、把加了文字水印的logo:out.jpg 加在二维码上面

    wmb, _ := os.Open("out.jpg")
    watermark, _ := jpeg.Decode(wmb)

    defer wmb.Close()

5、把水印写到右下角,并向0坐标各偏移10个像素

    offset := image.Pt((img.Bounds().Dx()-watermark.Bounds().Dx())/2, (img.Bounds().Dy()-watermark.Bounds().Dy())/2)
    b := img.Bounds()
    m := image.NewNRGBA(b)

    draw.Draw(m, b, img, image.ZP, draw.Src)

    draw.Draw(m, watermark.Bounds().Add(offset), watermark, image.ZP, draw.Over)

6、生成新图片new.jpg,并设置图片质量..

    imgw, _ := os.Create("new.jpg")
    jpeg.Encode(imgw, m, &jpeg.Options{100})

    defer imgw.Close()


//添加文本到图片
func AddTextToImage(){
    // 输入文件
    //var src os.File
    //打开logo原图
    src, err := os.Open("type.jpg")
    if err != nil {
        log.Fatalln("err1:",err)
    }

    defer src.Close()

    //生成带水印的图片:out.jpg
    dst, err := os.OpenFile("out.jpg", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
    if err != nil {
        log.Fatalln("err2:",err)
    }
    defer dst.Close()
    //在图片上添加文字,字体文件自行下载,并放在对应的工作目录
    signWriter := NewSigner("wryh.ttf")
    src2, err := os.Open("type.jpg")
    if err != nil {
        log.Fatalln("err1:",err)
    }
    defer src2.Close()
    fmt.Println(src)
    watermark1, _ := jpeg.Decode(src2)
    signWriter.SetStartPoint(0, 0)
    signWriter.SetFontSize(13)
    signWriter.SetSignPoint(watermark1.Bounds().Dx(), watermark1.Bounds().Dy())
    err = signWriter.Sign(src, dst, “Test_A”, 2)
    if err != nil {
        log.Fatalln("err3:",err)
    }
}



你可能感兴趣的:(Golang 生成带水印的二维码)