gpt4 book ai didi

image - Golang如何将图像连接/附加到另一个

转载 作者:IT老高 更新时间:2023-10-28 13:08:42 28 4
gpt4 key购买 nike

Go 具有出色的图像处理和数据库,但是我无法从较小的图像创建一个大图像。有谁知道如何在 Golang 中获取两个 png 或 jpeg 文件并将它们连接起来形成一个包含两个(或多个)文件的大图像?

我目前正在像这样读取 png 文件:

imgFile, err := os.Open(path)
if err != nil {
return Image{}, err
}
img, _, err := image.Decode(imgFile)
if err != nil {
return Image{}, err
}

rgba := image.NewRGBA(img.Bounds())
if rgba.Stride != rgba.Rect.Size().X*4 {
return Image{}, fmt.Errorf("unsupported stride")
}
draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)

我对如何获取此 png RGBA 数据并与其他 RGBA 数据连接和/或将其组合成“空”图像感到困惑。

最佳答案

创建一个新的空图像 (NewRGBA),其边界大到足以容纳两个图像。然后使用 Draw 方法在这个新的大图像的适当部分绘制每个图像。

以下是带有代码的步骤。

加载两张图片。

imgFile1, err := os.Open("test1.jpg")
if err != nil {
fmt.Println(err)
}
imgFile2, err := os.Open("test2.jpg")
if err != nil {
fmt.Println(err)
}
img1, _, err := image.Decode(imgFile1)
if err != nil {
fmt.Println(err)
}
img2, _, err := image.Decode(imgFile2)
if err != nil {
fmt.Println(err)
}

让我们在第一张图片的右侧绘制第二张图片。所以它的起点应该是 (w, 0) 其中 w 是第一张图片的宽度。第一张图片的右下角将成为第二张图片的左下角。

//starting position of the second image (bottom left)
sp2 := image.Point{img1.Bounds().Dx(), 0}

它应该是一个足够大的矩形来容纳它。

//new rectangle for the second image
r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())}

现在创建一个大矩形,其宽度足以容纳两张图片。

//rectangle for the big image
r := image.Rectangle{image.Point{0, 0}, r2.Max}

请注意,此大图将具有第二张图的高度。如果第一张图片较高,则会被裁剪。

创建一个新图像。

rgba := image.NewRGBA(r)

现在您可以将这两个图像绘制到这个新图像中

draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src)
draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)

由于我们创建了 r2,所以它在第一张图片的右侧,第二张图片将被绘制到右侧。

终于可以导出了。

out, err := os.Create("./output.jpg")
if err != nil {
fmt.Println(err)
}

var opt jpeg.Options
opt.Quality = 80

jpeg.Encode(out, rgba, &opt)

关于image - Golang如何将图像连接/附加到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35964656/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com