📅  最后修改于: 2023-12-03 15:31:02.043000             🧑  作者: Mango
在一些场景下,需要将多张图像合并成一张图像,这时候就需要使用Go语言来实现。本篇文章将分享如何将多张图像读入一张图像,并使用markdown格式返回代码片段。
package main
import (
"fmt"
"image"
"image/draw"
"image/jpeg"
"os"
)
// 定义最终输出图像的尺寸和名称
const (
outFilename = "output.jpg"
imgWidth = 3000
imgHeight = 3000
)
// 定义输入图像的名称和数量
var inFilenames = []string{"image1.jpg", "image2.jpg", "image3.jpg"}
// 创建一个新的大图像
outImg := image.NewRGBA(image.Rect(0, 0, imgWidth, imgHeight))
// 遍历所有输入图像并逐一绘制到大图像上
for _, inFilename := range inFilenames {
// 读取输入图像
inImgFile, err := os.Open(inFilename)
if err != nil {
panic(err)
}
defer inImgFile.Close()
inImg, err := jpeg.Decode(inImgFile)
if err != nil {
panic(err)
}
// 计算输入图像的位置
inImgWidth := inImg.Bounds().Max.X - inImg.Bounds().Min.X
inImgHeight := inImg.Bounds().Max.Y - inImg.Bounds().Min.Y
x := imgWidth/2 - inImgWidth/2
y := imgHeight/2 - inImgHeight/2
// 绘制输入图像
draw.Draw(outImg, image.Rect(x, y, x+inImgWidth, y+inImgHeight), inImg, image.Point{0, 0}, draw.Src)
}
outImgFile, err := os.Create(outFilename)
if err != nil {
panic(err)
}
defer outImgFile.Close()
jpeg.Encode(outImgFile, outImg, &jpeg.Options{Quality: 80})
package main
import (
"fmt"
"image"
"image/draw"
"image/jpeg"
"os"
)
// 定义最终输出图像的尺寸和名称
const (
outFilename = "output.jpg"
imgWidth = 3000
imgHeight = 3000
)
// 定义输入图像的名称和数量
var inFilenames = []string{"image1.jpg", "image2.jpg", "image3.jpg"}
func main() {
// 创建一个新的大图像
outImg := image.NewRGBA(image.Rect(0, 0, imgWidth, imgHeight))
// 遍历所有输入图像并逐一绘制到大图像上
for _, inFilename := range inFilenames {
// 读取输入图像
inImgFile, err := os.Open(inFilename)
if err != nil {
panic(err)
}
defer inImgFile.Close()
inImg, err := jpeg.Decode(inImgFile)
if err != nil {
panic(err)
}
// 计算输入图像的位置
inImgWidth := inImg.Bounds().Max.X - inImg.Bounds().Min.X
inImgHeight := inImg.Bounds().Max.Y - inImg.Bounds().Min.Y
x := imgWidth/2 - inImgWidth/2
y := imgHeight/2 - inImgHeight/2
// 绘制输入图像
draw.Draw(outImg, image.Rect(x, y, x+inImgWidth, y+inImgHeight), inImg, image.Point{0, 0}, draw.Src)
}
// 将合并后的图像保存到文件夹中
outImgFile, err := os.Create(outFilename)
if err != nil {
panic(err)
}
defer outImgFile.Close()
jpeg.Encode(outImgFile, outImg, &jpeg.Options{Quality: 80})
fmt.Println("Done!")
}
注意:本程序的输入图像需要放到与程序同一个文件夹下。输出图像将保存到程序所在文件夹下。