📌  相关文章
📜  golang 将许多图像读入一张图像 - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:31:02.043000             🧑  作者: Mango

Golang: 使用Go语言将多张图像读入一张图像

在一些场景下,需要将多张图像合并成一张图像,这时候就需要使用Go语言来实现。本篇文章将分享如何将多张图像读入一张图像,并使用markdown格式返回代码片段。

步骤
  1. 导入所需的包
package main

import (
	"fmt"
	"image"
	"image/draw"
	"image/jpeg"
	"os"
)
  1. 读取图像并创建一个新的大图像
// 定义最终输出图像的尺寸和名称
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))
  1. 读取输入图像并将其绘制到大图像上
// 遍历所有输入图像并逐一绘制到大图像上
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)
}
  1. 将合并后的图像保存到文件夹中
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!")
}

注意:本程序的输入图像需要放到与程序同一个文件夹下。输出图像将保存到程序所在文件夹下。