Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Manipulasi imej Golang: pelajari cara anti-pudar dan susunan piksel imej

Manipulasi imej Golang: pelajari cara anti-pudar dan susunan piksel imej

WBOY
WBOYasal
2023-08-18 20:30:171396semak imbas

. Antiluntur merujuk kepada menukar penyongsangan warna piksel dalam imej, manakala penyusunan semula piksel menyusun semula piksel dalam imej. Dalam artikel ini, kami akan menggunakan bahasa Golang untuk mempelajari cara melaksanakan kedua-dua operasi imej ini.

Manipulasi imej Golang: pelajari cara anti-pudar dan susunan piksel imej1. Anti pudar

Anti pudar merujuk kepada menyongsangkan warna setiap piksel dalam imej, iaitu menyongsangkan sepenuhnya kecerahan dan nilai warna. Berikut ialah contoh kod anti-pudar yang mudah:

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)
    }
}

Dalam contoh ini, kami mula-mula membuka fail imej, kemudian menyahkod imej dan mencipta imej kosong baharu. Seterusnya, kami mengulangi setiap piksel imej asal dan melakukan operasi tidak pudar padanya, menetapkan warna baharu kepada piksel imej baharu. Akhir sekali, kami mengekod dan menyimpan imej baharu ke fail output.

2. Susunan Piksel

Susunan piksel merujuk kepada operasi menyusun semula piksel dalam imej. Di Golang, susunan piksel dicapai dengan mengubah suai koordinat piksel. Berikut ialah contoh kod susunan piksel mudah:

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)
    }
}

Dalam contoh ini, kami juga mula-mula membuka fail imej dan menyahkod imej, kemudian mencipta imej kosong baharu. Seterusnya, kami melingkari setiap piksel imej asal dan mengira koordinat piksel baharu. Akhir sekali, kami menyalin nilai piksel imej asal ke dalam koordinat baharu imej baharu. Akhir sekali, kod dan simpan imej baharu.

Dengan mengkaji kod sampel kedua-dua operasi imej ini, kita dapati bahawa pemprosesan imej di Golang adalah sangat mudah dan fleksibel. Operasi ini bukan sahaja boleh diperluaskan kepada tugas pemprosesan imej yang lebih kompleks, tetapi juga boleh digunakan dengan perpustakaan dan alatan Golang yang lain untuk mencapai fungsi yang lebih menarik. Harap artikel ini dapat membantu anda lebih memahami pemprosesan imej dan pengaturcaraan Golang.

Atas ialah kandungan terperinci Manipulasi imej Golang: pelajari cara anti-pudar dan susunan piksel imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn