Golang 画像操作: 画像のアンチフェーディングとピクセル配置の方法を学ぶ
画像処理の分野では、アンチフェーディングとピクセル配置は 2 つの一般的な操作です。 。アンチフェードとは、画像内のピクセルの色の反転を変更することを指しますが、ピクセルの再配置は画像内のピクセルを再配置します。この記事では、Golang 言語を使用して、これら 2 つの画像操作を実装する方法を学びます。
1. アンチフェーディング
アンチフェーディングとは、画像内の各ピクセルの色を反転すること、つまり、明るさと色の値を完全に反転することを指します。簡単なフェード防止コードの例を次に示します。
package main import ( "image" "image/color" "image/png" "os" ) func main() { // 打开图像文件 file, err := os.Open("input.png") if err != nil { panic(err) } defer file.Close() // 解码图像 img, err := png.Decode(file) if err != nil { panic(err) } // 创建新的图像 bounds := img.Bounds() newImg := image.NewRGBA(bounds) // 遍历每个像素,进行反褪色操作 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { oldColor := img.At(x, y) oldR, oldG, oldB, _ := oldColor.RGBA() // 反褪色操作 newR := 0xFFFF - oldR newG := 0xFFFF - oldG newB := 0xFFFF - oldB // 创建新的颜色 newColor := color.RGBA{uint8(newR >> 8), uint8(newG >> 8), uint8(newB >> 8), 0xFF} // 设置新的像素值 newImg.Set(x, y, newColor) } } // 创建输出文件 outputFile, err := os.Create("output.png") if err != nil { panic(err) } defer outputFile.Close() // 编码并保存图像 err = png.Encode(outputFile, newImg) if err != nil { panic(err) } }
この例では、最初に画像ファイルを開き、次に画像をデコードして新しい空白の画像を作成します。次に、元の画像の各ピクセルを反復処理し、それに対してアンフェード操作を実行し、新しい色を新しい画像ピクセルに設定します。最後に、新しい画像をエンコードして出力ファイルに保存します。
2. ピクセルの配置
ピクセルの配置とは、画像内のピクセルを再配置する操作を指します。 Golang では、ピクセルの配置はピクセルの座標を変更することで実現されます。単純なピクセル配置のコード例を次に示します。
package main import ( "image" "image/png" "os" ) func main() { // 打开图像文件 file, err := os.Open("input.png") if err != nil { panic(err) } defer file.Close() // 解码图像 img, err := png.Decode(file) if err != nil { panic(err) } // 创建新的图像 bounds := img.Bounds() newImg := image.NewRGBA(bounds) // 遍历每个像素,并进行像素排列 for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { // 计算新的像素坐标 newX := bounds.Max.X - x - 1 newY := bounds.Max.Y - y - 1 // 获取原始像素 oldColor := img.At(x, y) // 设置新的像素值 newImg.Set(newX, newY, oldColor) } } // 创建输出文件 outputFile, err := os.Create("output.png") if err != nil { panic(err) } defer outputFile.Close() // 编码并保存图像 err = png.Encode(outputFile, newImg) if err != nil { panic(err) } }
この例でも、最初に画像ファイルを開いて画像をデコードし、次に新しい空の画像を作成します。次に、元の画像の各ピクセルをループして、新しいピクセル座標を計算します。最後に、元の画像のピクセル値を新しい画像の新しい座標にコピーします。最後に、新しい画像をエンコードして保存します。
これら 2 つの画像操作のサンプル コードを調べると、Golang での画像処理が非常にシンプルで柔軟であることがわかります。これらの操作は、より複雑な画像処理タスクに拡張できるだけでなく、他の Golang ライブラリやツールと併用して、より興味深い機能を実現することもできます。この記事が画像処理と Golang プログラミングの理解を深めるのに役立つことを願っています。
以上がGolang の画像操作: 画像のフェード防止とピクセル配置の方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。