Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pemprosesan imej Golang: cara memotong dan meregangkan imej

Pemprosesan imej Golang: cara memotong dan meregangkan imej

王林
王林asal
2023-08-18 11:49:44904semak imbas

. Dalam banyak aplikasi, kita selalunya perlu melakukan beberapa pemprosesan khas pada gambar, seperti salah potong dan regangan. Artikel ini akan memperkenalkan cara menggunakan Golang untuk memotong silang dan meregangkan imej, serta memberikan contoh kod yang sepadan.

Pemprosesan imej Golang: cara memotong dan meregangkan imej1. Potongan silang gambar

Potongan silang merujuk kepada operasi regangan imej secara menyerong dalam arah mendatar dan menegak, menyebabkan bentuk imej berubah. Di Golang, kita boleh menggunakan pakej github.com/nfnt/resize untuk melaksanakan fungsi salah potong imej.

Contoh kod:

package main

import (
    "github.com/nfnt/resize"
    "image"
    "image/draw"
    "image/jpeg"
    "os"
)

func main() {
    // 读取原始图片
    file, _ := os.Open("input.jpg")
    defer file.Close()
    img, _ := jpeg.Decode(file)

    // 创建一个新的画布,并设置宽度和高度
    width := 800
    height := 600
    dst := image.NewRGBA(image.Rect(0, 0, width, height))

    // 错切参数
    shearX := 0.2 // 水平错切强度
    shearY := 0.4 // 垂直错切强度

    // 进行图片错切操作
    draw.Draw(dst, dst.Bounds(), img, image.ZP, draw.Src)
    for x := 1; x < img.Bounds().Dx(); x++ {
        for y := 1; y < img.Bounds().Dy(); y++ {
            dst.Set(x, y, img.At(x+int(shearX*float64(y)), y+int(shearY*float64(x))))
        }
    }

    // 将处理后的图片保存到文件中
    out, _ := os.Create("output.jpg")
    defer out.Close()
    jpeg.Encode(out, dst, nil)
}

Kod di atas mula-mula membaca fail imej asal dan mengisytiharkan lebar dan tinggi imej sasaran. Kami kemudian mencipta kanvas baharu dan menggunakan fungsi draw.Draw untuk melukis imej asal pada kanvas baharu. Kemudian, dalam gelung bersarang, setiap piksel berperingkat mengikut parameter berperingkat, dan hasilnya ditetapkan kepada kanvas baharu. Akhir sekali, simpan imej salah potong ke fail.

2. Regangan Imej
Regangan merujuk kepada menukar saiz imej supaya lebar atau tinggi imej menjadi lebih besar atau lebih kecil. Di Golang, kita boleh menggunakan pakej github.com/nfnt/resize untuk melaksanakan fungsi regangan imej. github.com/nfnt/resize 包来实现图片错切的功能。

代码示例:

package main

import (
    "github.com/nfnt/resize"
    "image/jpeg"
    "os"
)

func main() {
    // 读取原始图片
    file, _ := os.Open("input.jpg")
    defer file.Close()
    img, _ := jpeg.Decode(file)

    // 拉伸参数
    width := 800  // 目标宽度
    height := 600 // 目标高度

    // 进行图片拉伸操作
    dst := resize.Resize(uint(width), uint(height), img, resize.NearestNeighbor)

    // 将处理后的图片保存到文件中
    out, _ := os.Create("output.jpg")
    defer out.Close()
    jpeg.Encode(out, dst, nil)
}

以上代码首先读取了原始图片文件,并声明了目标图片的宽度和高度。然后,我们创建了一个新的画布,并使用 draw.Draw 函数将原始图片绘制到新画布上。接着,在嵌套的循环中,根据错切参数对每一个像素进行错切操作,并将结果设置到新画布上。最后,将经过错切处理的图片保存到文件中。

二、图片拉伸
拉伸是指改变图片的尺寸,使得图片的宽度或高度变得更大或更小。在Golang中,我们可以使用 github.com/nfnt/resize包来实现图片拉伸的功能。

代码示例:

rrreee

以上代码首先读取了原始图片文件,并声明了目标图片的宽度和高度。然后,使用 resize.Resize 函数将原始图片拉伸到目标尺寸。最后,将经过拉伸处理的图片保存到文件中。

结论:
本文介绍了使用Golang进行图片错切和拉伸的方法,并给出了相应的代码示例。通过使用 github.com/nfnt/resize

Contoh kod: 🎜rrreee🎜Kod di atas mula-mula membaca fail imej asal dan mengisytiharkan lebar dan tinggi imej sasaran. Kemudian, gunakan fungsi resize.Resize untuk meregangkan imej asal kepada saiz sasaran. Akhir sekali, simpan imej yang diregangkan ke fail. 🎜🎜Kesimpulan: 🎜Artikel ini memperkenalkan kaedah menggunakan Golang untuk memotong silang dan meregangkan imej, dan memberikan contoh kod yang sepadan. Dengan menggunakan pakej github.com/nfnt/resize, kami boleh melakukan operasi potong silang dan regangan pada imej dengan mudah, memperkayakan fungsi pemprosesan imej. Saya berharap pembaca dapat lebih memahami dan menggunakan teknik pemprosesan imej Golang melalui pengenalan artikel ini. 🎜

Atas ialah kandungan terperinci Pemprosesan imej Golang: cara memotong dan meregangkan 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