在Golang中设置图像的不透明度

我有以下代码。这确实将前景图像(logo.jpg)粘贴在背景图像(background.jpg)上,同时粘贴该前景图像,我要设置该前景图像的不透明度。我使用了DrawMask(http://golang.org/doc/articles/image_draw.html),但似乎这里缺少某些内容。请参见下面的代码。有人有主意吗?


package main


    import (

    "os"

    "image/draw"

    "image"

    "image/jpeg"

)


func main() {

//Background image

    fImg1, _ := os.Open("background.jpg")

    defer fImg1.Close()

    img1, _, _ := image.Decode(fImg1)


//Logo to stick over background image

    fImg2, _ := os.Open("logo.jpg")

    defer fImg2.Close()

    img2, _, _ := image.Decode(fImg2)


//Mask image (that is just a solid light gray image of same size as logo)

    fmask, _ := os.Open("mask.jpg")

    defer fImg2.Close()

    mask, _, _ := image.Decode(fmask)


//Create a new blank image m

    m := image.NewRGBA(image.Rect(0, 0, 1920, 1280))


//Paste background image over m

    draw.Draw(m, m.Bounds(), img1, image.Point{0,0}, draw.Src)


//Now paste logo image over m using a mask (ref. http://golang.org/doc/articles/image_draw.html )


//******Goal is to have opacity value 50 of logo image, when we paste it****

    draw.DrawMask(m, m.Bounds(), img2, image.Point{-100,-100}, mask, image.Point{-100,-100}, draw.Src)


     toimg, _ := os.Create("new.jpg")

     defer toimg.Close()


     jpeg.Encode(toimg, m, &jpeg.Options{jpeg.DefaultQuality})

}

上面的代码由Sathish(http://stackoverflow.com/questions/12430874/image-manipulation-in-golang)帮助。谢谢Sathish。


三国纷争
浏览 379回答 2
2回答

喵喵时光机

我发现您的代码有两个错误。您未正确设置遮罩。要获得50%的不透明度,您需要使用类似mask := image.NewUniform(color.Alpha{128})128介于0(透明)和255(不透明)之间的方式。如果您希望不透明度超过256级,请参阅color.Alpha16。打电话时draw.DrawMask(),您很可能想使用draw.OverOp而不是draw.Src。尝试一下它们,您应该会发现区别。我也建议使用m := image.NewRGBA(img1.Bounds()),但是手动进行操作并没有错。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go