网站首页 返回列表 像“草根”一样,紧贴着地面,低调的存在,冬去春来,枯荣无恙。

87.给二维码加logo,draw.Draw的应用实例

2020-06-10 11:33:11 admin 757

go语言对图片的操作相当方便。无论是生成一张新图片,还是在现有的图片上做一些操作。这次,来试试非常流行的图片上加自己的logo水印。当然,二维码是比较特殊的一个例子,它不能超过背景图片的一定比例面积,不然可能会影响二维码的识别。
首先要准备好叠加的两个图片文件,这里我要叠加的文件是 1.png 和 2.png

__

  1. file1 := "1.png"
  2. file2 := "2.png"
  3. img1, err1 := os.Open(file1)
  4. img2, err2 := os.Open(file2)
  5. if err1 != nil {
  6. log.Println("图片文件打开错误", err1.Error())
  7. }
  8. if err2 != nil {
  9. log.Println("图片文件打开错误", err2.Error())
  10. }
  11. mapImg, _, err3 := image.Decode(img1)
  12. icoImg, _, err4 := image.Decode(img2)
  13. if err3 != nil {
  14. log.Println("", err3.Error())
  15. panic(err3)
  16. }
  17. if err4 != nil {
  18. log.Println("", err4.Error())
  19. panic(err4)
  20. }

然后,准备好画布边界和水印相对位置。水印的相对位置,是针对背景左上角的位置来说的。

__

  1. //--画布背景边界
  2. canvas := image.NewRGBA(mapImg.Bounds())
  3. fmt.Println(mapImg.Bounds().Size())
  4. fmt.Println(icoImg.Bounds().Size())
  5. //--水印logo相对背景左上角的位置
  6. icoImgPnt := image.Point{(mapImg.Bounds().Size().X-icoImg.Bounds().Size().X)/-2,(mapImg.Bounds().Size().Y-icoImg.Bounds().Size().Y)/-2}

下面是最关键的两句代码来了。第一句是画出背景,第二句是画出水印logo的。

__

  1. draw.Draw(canvas, canvas.Bounds(), mapImg, image.Point{0,0}, draw.Src)
  2. draw.DrawMask(canvas, canvas.Bounds(), image.Image(icoImg), icoImgPnt, mapImg, image.Point{0,0}, draw.Src)

这里已经把需要的内容画出来了,还需要再加上最后一步,把内容生成图片。

__

  1. myfile , err := os.Create("new.png") // now let's save image
  2. if err != nil {
  3. panic(err)
  4. }
  5. png.Encode(myfile, canvas)

生成的效果如下图片如下

new.png

关键字词logodrawDraw

分享到:

如需留言,请 登录,没有账号?请 注册

0 条评论 0 人参与

顶部 底部