微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Golang如何将图像连接/附加到彼此

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")
imgFile2,err := os.Open("test2.jpg")
if err != nil {
    fmt.Println(err)
}
img1,err := image.Decode(imgFile1)
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,r2.Max}

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

创建一个新图像.

rgba := image.NewRGBA(r)

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

draw.Draw(rgba,img1.Bounds(),img1,draw.Src)
draw.Draw(rgba,r2,img2,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)

原文地址:https://www.jb51.cc/go/186890.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐