首頁  >  文章  >  後端開發  >  如何在Golang中連接圖像?

如何在Golang中連接圖像?

Linda Hamilton
Linda Hamilton原創
2024-11-06 11:14:02746瀏覽

How to Concatenate Images in Golang?

在Golang 中連接圖像

問題

儘管Go 提供了強大的圖像處理功能,但用戶正在從多個較小的圖像創建單一影像時經常面臨挑戰。具體來說,如何將兩個 PNG 或 JPEG 檔案連接起來形成一個完整的圖像?

分析

提供的程式碼揭示了將PNG 檔案讀取為RGBA 格式:

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)

然而,問題的關鍵在於理解如何將多個RGBA 資料集組合成單一圖像。

解決方案

解決方案涉及創建一個新的空圖像(NewRGBA)足夠的大小來容納兩個原始圖像。隨後,可以使用 Draw 方法將每個影像疊加到擴充影像的指定部分:

// Load two images
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)
}

// Starting position of the second image
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}

// Create a new image
rgba := image.NewRGBA(r)

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

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

var opt jpeg.Options
opt.Quality = 80

jpeg.Encode(out, rgba, &opt)

注意: 此方法保留第二個影像的高度。如果第一張圖片較高,則會被裁切。

以上是如何在Golang中連接圖像?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn