儘管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中文網其他相關文章!