87.给二维码加logo,draw.Draw的应用实例
go语言对图片的操作相当方便。无论是生成一张新图片,还是在现有的图片上做少量操作。这次,来试试非常流行的图片上加自己的logo水印。当然,二维码是比较特殊的一个例子,它不能超过背景图片的肯定比例面积,不然可能会影响二维码的识别。
首先要准备好叠加的两个图片文件,这里我要叠加的文件是 1.png 和 2.png
file1 := "1.png" file2 := "2.png" img1, err1 := os.Open(file1) img2, err2 := os.Open(file2) if err1 != nil { log.Println("图片文件打开错误", err1.Error()) } if err2 != nil { log.Println("图片文件打开错误", err2.Error()) } mapImg, _, err3 := image.Decode(img1) icoImg, _, err4 := image.Decode(img2) if err3 != nil { log.Println("", err3.Error()) panic(err3) } if err4 != nil { log.Println("", err4.Error()) panic(err4) }而后,准备好画布边界和水印相对位置。水印的相对位置,是针对背景左上角的位置来说的。
//--画布背景边界 canvas := image.NewRGBA(mapImg.Bounds()) fmt.Println(mapImg.Bounds().Size()) fmt.Println(icoImg.Bounds().Size()) //--水印logo相对背景左上角的位置 icoImgPnt := image.Point{(mapImg.Bounds().Size().X-icoImg.Bounds().Size().X)/-2,(mapImg.Bounds().Size().Y-icoImg.Bounds().Size().Y)/-2}下面是最关键的两句代码来了。第一句是画出背景,第二句是画出水印logo的。
draw.Draw(canvas, canvas.Bounds(), mapImg, image.Point{0,0}, draw.Src) draw.DrawMask(canvas, canvas.Bounds(), image.Image(icoImg), icoImgPnt, mapImg, image.Point{0,0}, draw.Src)这里已经把需要的内容画出来了,还需要再加上最后一步,把内容生成图片。
myfile, err := os.Create("new.png") // now let's save image if err != nil { panic(err) } png.Encode(myfile, canvas)生成的效果如下图片如下
new.png
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 87.给二维码加logo,draw.Draw的应用实例
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 87.给二维码加logo,draw.Draw的应用实例