go原生库简单合成一张图 - Go语言中文社区

go原生库简单合成一张图


需求,将背景图和二维码图合成一张图片

1.准备两张图

300*300的图

256*256的图

2.准备功能方法

package main

import (
	"image"
	"image/draw"
	"image/jpeg"
	"image/png"
	"os"
)

func main() {
	//简单合成图
	createImg()
}

func createImg() {
	//背景图
	//如果是windows 换成c:/1.jpg
	imgb, _ := os.Open("/Users/dong/Desktop/1.jpg")
	img, _ := jpeg.Decode(imgb)
	defer imgb.Close()
	//添加图
	//如果是windows 换成c:/1.jpg
	wmb, _ := os.Open("/Users/dong/Desktop/2.png")
	watermark, _ := png.Decode(wmb)
	defer wmb.Close()
	//坐标偏差,x轴y轴,这个自己算一下
	offset := image.Pt(22, 22)
	b := img.Bounds()
	m := image.NewRGBA(b)
	draw.Draw(m, b, img, image.ZP, draw.Src)
	draw.Draw(m, watermark.Bounds().Add(offset), watermark, image.ZP, draw.Over)
	//如果是windows 换成c:/1.jpg
	imgw, _ := os.Create("/Users/dong/Desktop/3.jpg")
	jpeg.Encode(imgw, m, &jpeg.Options{jpeg.DefaultQuality})
	defer imgw.Close()
}

3.效果如图

17:00

第二版动态带计算位置,默认设置集中,可以自行调整位置

package main

import (
	"image"
	"image/draw"
	"image/jpeg"
	"image/png"
	"os"
)

func main() {
	//简单合成图
	createImg()
}

func createImg() {
	//背景图
	//如果是windows 换成c:/1.jpg
	backgroudImgFile, _ := os.Open("/Users/dong/Desktop/1.jpg")
	backgroudImg, _ := jpeg.Decode(backgroudImgFile)
	defer backgroudImgFile.Close()
	backgroudBound := backgroudImg.Bounds()
	//x轴坐标总数
	backgroudX := backgroudBound.Size().X
	//y轴坐标总数
	backgroudY := backgroudBound.Size().Y
	//添加图
	//如果是windows 换成c:/1.jpg
	centerImgFile, _ := os.Open("/Users/dong/Desktop/2.png")
	centerImg, _ := png.Decode(centerImgFile)
	defer centerImgFile.Close()
	centerBound := centerImg.Bounds()
	//x轴坐标总数
	centerX := centerBound.Size().X
	//y轴坐标总数
	centerY := centerBound.Size().Y

	//坐标偏差,x轴y轴 计算
	newImgX := (backgroudX - centerX) / 2
	newImgY := (backgroudY - centerY) / 2
	offset := image.Pt(newImgX, newImgY)
	//x轴坐标总数
	m := image.NewRGBA(backgroudBound)
	draw.Draw(m, backgroudBound, backgroudImg, image.ZP, draw.Src)
	draw.Draw(m, centerImg.Bounds().Add(offset), centerImg, image.ZP, draw.Over)
	//如果是windows 换成c:/1.jpg
	imgw, _ := os.Create("/Users/dong/Desktop/3.jpg")
	jpeg.Encode(imgw, m, &jpeg.Options{jpeg.DefaultQuality})
	defer imgw.Close()
}

特殊说明:

如果需要缩放,可以参考

http://yondu.vip/2019/01/26/WEB9aad981a4ff1d84152e68ace80eddd33/

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/aaaadong/article/details/91039406
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 10:44:18
  • 阅读 ( 1639 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢