Go は堅牢な画像操作機能を提供しますが、ユーザーは多くの場合、複数の小さな画像から 1 つの画像を作成するという課題に直面します。 。具体的には、2 つの 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 データセットを 1 つの画像に結合する方法を理解することにあります。
解決策には、次の新しい空の画像 (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)
注: このメソッドは 2 番目の画像の高さを保持します。最初の画像の高さが高い場合はトリミングされます。
以上がGolang で画像を連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。