golang 利用遮罩裁剪图片
在 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 方法从图片中裁剪出一个矩形区域,然后使用遮罩将裁剪后的图片中非红色部分变为透明。最后,保存裁剪后的图片
原文地址: http://www.cveoy.top/t/topic/ejsC 著作权归作者所有。请勿转载和采集!