在 Golang 中,可以使用 image 包提供的 Crop 方法来裁剪图片。下面是一个示例代码,演示如何利用遮罩裁剪图片:

import (
    "image"
    "image/color"
    "image/png"
    "os"
)

func main() {
    // 读取图片
    file, err := os.Open("image.png")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    img, err := png.Decode(file)
    if err != nil {
        panic(err)
    }

    // 创建遮罩
    mask := image.NewGray(img.Bounds())
    for y := 0; y < img.Bounds().Dy(); y++ {
        for x := 0; x < img.Bounds().Dx(); x++ {
            // 遮罩只保留红色通道
            r, _, _, _ := img.At(x, y).RGBA()
            if r > 0 {
                mask.SetGray(x, y, color.Gray{255})
            }
        }
    }

    // 裁剪图片
    cropped := image.NewRGBA(image.Rect(0, 0, 100, 100))
    copy(cropped, img)
    cropped = cropped.SubImage(img.Bounds().Intersect(cropped.Bounds()))
    cropped = image.NewAlpha(cropped.Bounds())
    copy(cropped, mask)
    cropped = cropped.SubImage(img.Bounds().Intersect(cropped.Bounds()))

    // 保存裁剪后的图片
    file, err = os.Create("cropped.png")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    png.Encode(file, cropped)
}

上述代码中,首先读取了一张图片,并创建了一个与图片相同大小的遮罩。然后,遍历图片的每个像素,将红色通道值大于 0 的像素设置为白色,其余像素设置为黑色。

接着,使用 SubImage 方法从图片中裁剪出一个矩形区域,然后使用遮罩将裁剪后的图片中非红色部分变为透明。最后,保存裁剪后的图片

golang 利用遮罩裁剪图片

原文地址: http://www.cveoy.top/t/topic/ejsC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录