在 Golang 中,可以使用第三方库来实现将多张图片按指定尺寸合成一张图片或者将多张图或加文字合成一张图。其中比较常用的库有:
- “github.com/disintegration/imaging”
- “github.com/fogleman/gg”
- “github.com/nfnt/resize”
以下是一个使用”disintegration/imaging”库的例子:
package main
import (
"image"
"image/color"
"log"
"os"
"github.com/disintegration/imaging"
)
func main() {
// 打开两张图片
file1, err := os.Open("image1.png")
if err != nil {
log.Fatal(err)
}
defer file1.Close()
file2, err := os.Open("image2.png")
if err != nil {
log.Fatal(err)
}
defer file2.Close()
img1, err := imaging.Decode(file1)
if err != nil {
log.Fatal(err)
}
img2, err := imaging.Decode(file2)
if err != nil {
log.Fatal(err)
}
// 按指定尺寸将两张图片合成一张
dst := imaging.New(400, 300, color.NRGBA{0, 0, 0, 0})
dst = imaging.Paste(dst, img1, image.Pt(0, 0))
dst = imaging.Paste(dst, img2, image.Pt(200, 0))
// 保存合成后的图片
err = imaging.Save(dst, "result.png")
if err != nil {
log.Fatal(err)
}
}
以上代码将两张图片按指定尺寸合成了一张图片,并保存为”result.png”。可以根据需要调整代码中的参数,以实现不同的效果。
如果需要加入文字,可以使用”golang.org/x/image/font”和”github.com/golang/freetype”库来实现。以下是一个添加文字的例子:
package main
import (
"image"
"image/color"
"log"
"os"
"github.com/disintegration/imaging"
"golang.org/x/image/font"
"golang.org/x/image/font/basicfont"
"golang.org/x/image/math/fixed"
)
func main() {
// 打开一张图片
file, err := os.Open("image.png")
if err != nil {
log.Fatal(err)
}
defer file.Close()
img, err := imaging.Decode(file)
if err != nil {
log.Fatal(err)
}
// 在图片上添加文字
dst := imaging.New(400, 300, color.NRGBA{0, 0, 0, 0})
dst = imaging.Paste(dst, img, image.Pt(0, 0))
context := gg.NewContextForImage(dst)
context.SetFont(basicfont.Face7x13)
context.SetRGB(1, 1, 1)
context.DrawStringAnchored("Hello, world!", 200, 150, 0.5, 0.5)
// 保存合成后的图片
err = context.SavePNG("result.png")
if err != nil {
log.Fatal(err)
}
}
以上代码在打开的图片上添加了一个文字,并保存为”result.png”。同样可以根据需要调整代码中的参数,以实现不同的效果。