go原生库简单合成一张图

版权声明:by DongBao https://blog.csdn.net/aaaadong/article/details/91039406

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

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

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

扫描二维码关注公众号,回复: 6428329 查看本文章
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/

猜你喜欢

转载自blog.csdn.net/aaaadong/article/details/91039406