ホームページ >バックエンド開発 >Golang >Go で画像を結合および回転するにはどうすればよいですか?

Go で画像を結合および回転するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 11:07:10975ブラウズ

How Can I Combine and Rotate Images in Go?

Go を使用した回転による画像操作

問題

次のシナリオを考えてみましょう:

  • 背景画像 (bi) )
  • 画像1 (i1)
  • Image2 (i2)

目標は、i1 と i2 を特定の角度で bi 上に配置し、最終的なイメージを作成することです。 i1 と i2 の座標が回転角度とともに提供されます。 i1 と i2 は部分的に重複する可能性がありますが、Z インデックスによってどの画像が前景に表示されるかが決まります。

タスクは、この機能を Golang で実現することです。

解決策

Go イメージ パッケージは、「Go でのイメージ描画」で説明されているように、イメージ操作機能を提供します。 (http://golang.org/doc/articles/image_draw.html)。

画像を回転と組み合わせるには、graphics-go と呼ばれる補助パッケージをお勧めします。以下に、回転を伴う 2 つの画像の組み合わせを示すサンプル Go プログラムを示します。

package main

import (
    "fmt"
    "os"
    "image/draw"
    "image"
    "image/jpeg"
    "code.google.com/p/graphics-go/graphics"
)

func main() {
    fImg1, _ := os.Open("arrow1.jpg")
    defer fImg1.Close()
    img1, _, _ := image.Decode(fImg1)

    fImg2, _ := os.Open("arrow2.jpg")
    defer fImg2.Close()
    img2, _, _ := image.Decode(fImg2)

    m := image.NewRGBA(image.Rect(0, 0, 800, 600))
    draw.Draw(m, m.Bounds(), img1, image.Point{0,0}, draw.Src)
    //draw.Draw(m, m.Bounds(), img2, image.Point{-200,-200}, draw.Src)
    graphics.Rotate(m, img2, &graphics.RotateOptions{3.5})

    toimg, _ := os.Create("new.jpg")
    defer toimg.Close()

    jpeg.Encode(toimg, m, &jpeg.Options{jpeg.DefaultQuality})
}

この例では:

  • 2 つの画像、「arrow1.jpg」と「arrow2.jpg」 "、メモリにロードされます。
  • 新しい RGBA イメージ "m" が目的の出力で作成されます。
  • 最初の画像 "img1" は原点で "m" に描画されます。
  • 2 番目の画像 "img2" は回転され、"m" に描画されます。特定の角度とオフセット。
    結果として結合された画像は、「new.jpg」として保存されます。

graphics-go パッケージは、インストールとセットアップが必要な場合がある外部ライブラリに依存しています。詳細については、ドキュメントを参照してください。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。