Golang の画像の回転

王林
リリース: 2023-05-19 12:54:08
オリジナル
667 人が閲覧しました

Golang は強力なプログラミング言語であり、その組み込みの画像処理ライブラリは、画像を処理する場合に特に役立つ多くの強力な関数を提供します。 Golang は、画像に対してさまざまな処理を実行できる非常に便利な画像変換ライブラリを提供します。その 1 つは画像の回転です。

多くのアプリケーション シナリオでは、撮影した写真にエラーがあったり、角度が見栄えが悪かったりすることが多く、写真を回転する必要があります。この場合、より良い結果を得るには、画像を特定の角度に回転する必要があります。写真を回転すると、画像がより美しく芸術的になり、写真家の芸術的レベルを反映するのに役立ちます。

それでは、Go で画像を回転するにはどうすればよいでしょうか? Golangの画像処理ライブラリを利用して動作させることができます。

まず、「image」パッケージと「image/draw」パッケージをインポートする必要があります。

import ( "image" "image/draw" )
ログイン後にコピー

次に、画像を開き、回転した画像を保存するための変数を定義する必要があります。

file, err := os.Open("example_image.png") if err != nil { log.Fatal(err) } defer file.Close() img, _, err := image.Decode(file) if err != nil { log.Fatal(err) } // 定义旋转后的图片 rotatedImg := image.NewRGBA(img.Bounds())
ログイン後にコピー

ここでは、画像ファイルを開きます。 image.Decode() 関数を通じてそれをデコードし、img 変数に保存します。次に、回転された画像を保存するために変数rotatedImgを定義する必要があります。 img.Bounds() を使用して新しい画像のサイズと形状を設定し、image.NewRGBA() に渡して新しい画像を作成します。

これで、画像の回転を開始できます。まず、回転角度を定義し、次にループを使用して画像の各ピクセルを走査し、新しい画像の対応する位置に描画する必要があります。

angle := 45.0 // 计算旋转前后的位置关系 rotatedImgRect := image.Rect(0, 0, img.Bounds().Dy(), img.Bounds().Dx()) rotation := draw.Quadrant(0) switch (int(angle) / 90) % 4 { case 0: rotation = draw.Quadrant(0) break case 1: rotation = draw.Quadrant(1) break case 2: rotation = draw.Quadrant(2) break case 3: rotation = draw.Quadrant(3) break } rotation = draw.RotateQuadrant(rotation, img.Bounds()) // 遍历图片的每一个像素并将其绘制到新图像上 for x := 0; x < rotatedImg.Bounds().Dx(); x++ { for y := 0; y < rotatedImg.Bounds().Dy(); y++ { // 计算旋转后的像素坐标 newX := float64(x)*math.Cos(angle) - float64(y)*math.Sin(angle) newY := float64(x)*math.Sin(angle) + float64(y)*math.Cos(angle) newX += float64(img.Bounds().Dx() - 1) newY += float64(img.Bounds().Dy() - 1) // 将旋转后的像素绘制到新图像上 draw.Draw(rotatedImg, rotatedImg.Bounds(), img, image.Point{X: int(newX), Y: int(newY)}, draw.Over) } }
ログイン後にコピー

コードのこの部分では、まず回転角度を定義します。ここでは例として 45 度を取り上げます。次に回転後の位置関係を計算しますが、これが非常に重要なステップです。 image.Rect() 関数を使用して、回転前の画像のサイズとは反対のサイズの新しい長方形領域を作成します。次に、draw.Quadrant() 関数を使用して Quadrant 変数を作成し、その値を 0 に初期化します。これは、画像を時計回りに 0 度回転することを意味します。この象限変数は、回転前の画像の領域と結合されて、新しい回転領域が生成されます。最後に、ユーティリティ関数draw.RotateQuadrant()を使用して象限を回転させ、指定した角度で画像を回転させます。

次に、ネストされた for ループを使用して、すべてのピクセルを反復処理します。回転されたピクセル座標を正しく取得するために、いくつかの数学的計算を実行します。まず、ピクセルの座標に cos 関数と sin 関数を乗算して、ピクセルの回転座標を計算します。次に、回転した各ピクセルの座標を最終イメージに追加し、ユーティリティ関数draw.Draw()を使用して新しいイメージに描画します。

最後に、回転した画像をディスクに保存できます。

rotatedImgFile, err := os.Create("rotated_image.png") if err != nil { log.Fatal(err) } defer rotatedImgFile.Close() png.Encode(rotatedImgFile, rotatedImg)
ログイン後にコピー

ここでは、os.Create() を使用して新しいファイルを開き、png.Encode() を使用して回転した画像をファイルに書き込みます。ローテーションが完了したら、ファイルやその他の開いているリソースを閉じる必要があります。

概要:

Golang は、画像を簡単に回転できる強力な画像処理ライブラリを多数提供しています。この記事では、Golangで画像を回転させて新しい画像ファイルとして保存する方法を紹介しました。プロジェクトで画像の回転処理も実行する必要がある場合は、Golang での画像の回転方法を試してみるとよいでしょう。

以上がGolang の画像の回転の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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