Goで複数の画像を1つに結合するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-07 06:07:03
オリジナル
180 人が閲覧しました

How to Combine Multiple Images into One in Go?

Go で画像を結合する方法

Go では、画像を操作して、複数の小さな画像から 1 つの大きな画像を作成できます。これを行うには、以下の手順に従います。

  1. 画像をロードします。 os.Open を使用して画像ファイルを開き、image.Decode を使用して画像を image.Image オブジェクトにデコードします。 .
  2. 大きな画像を作成します: 最終的な画像の寸法を決定し、image.NewRGBA を使用してその寸法で空の画像を作成します。
  3. 最初の画像: 大きな画像上に最初の画像を描画するには、draw.Draw を使用します。開始点とソース画像を指定します。
  4. 2 番目の画像の開始点を計算します: 最終画像内の 2 番目の画像のオフセットを決定します。通常、これは最初の画像の幅です。
  5. 2 番目の画像を描画する: 2 番目の画像を大きな画像上に描画するには、draw.Draw を使用します。開始点とソース画像を指定します。
  6. 最終画像のエクスポート: image.Encode を使用して、結合された画像を目的の形式でファイルにエクスポートします。

たとえば、2 つの画像の水平方向の連結を作成するには、次のコードを使用できます:

import (
    "fmt"
    "image"
    "image/draw"
    "image/jpeg"
    "os"
)

func main() {
    // Load the images
    img1, err := os.Open("test1.jpg")
    if err != nil {
        fmt.Println(err)
    }
    img2, err := os.Open("test2.jpg")
    if err != nil {
        fmt.Println(err)
    }
    img1, _, err = image.Decode(img1)
    if err != nil {
        fmt.Println(err)
    }
    img2, _, err = image.Decode(img2)
    if err != nil {
        fmt.Println(err)
    }

    // Create the large image
    r1 := img1.Bounds()
    r2 := img2.Bounds()
    r := image.Rectangle{image.Point{0, 0}, r2.Max}
    rgba := image.NewRGBA(r)

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

    // Export the final 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)
}
ログイン後にコピー

以上がGoで複数の画像を1つに結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!