golang实现给图片加水印


最近跟在写golang图片加水印的方法,这里用的是一些基本的功能。

package main import ( "fmt" "image" "image/draw" "image/jpeg" "image/png" "os" ) func main() { //图片,网上随便找了一张 img_file, err := os.Open("bg.jpg") if err != nil { fmt.Println("打开图片出错") fmt.Println(err) os.Exit(-1) } defer img_file.Close() img, err := jpeg.Decode(img_file) if err != nil { fmt.Println("把图片解码为结构体时出错") fmt.Println(img) os.Exit(-1) } //水印,用的是我自己支付宝的二维码 wmb_file, err := os.Open("alipay.png") if err != nil { fmt.Println("打开水印图片出错") fmt.Println(err) os.Exit(-1) } defer wmb_file.Close() wmb_img, err := png.Decode(wmb_file) if err != nil { fmt.Println("把水印图片解码为结构体时出错") fmt.Println(err) os.Exit(-1) } //把水印写在右下角,并向0坐标偏移10个像素 offset := image.Pt(img.Bounds().Dx()-wmb_img.Bounds().Dx()-10, img.Bounds().Dy()-wmb_img.Bounds().Dy()-10) b := img.Bounds() //根据b画布的大小新建一个新图像 m := image.NewRGBA(b) //image.ZP代表Point结构体,目标的源点,即(0,0) //draw.Src源图像透过遮罩后,替换掉目标图像 //draw.Over源图像透过遮罩后,覆盖在目标图像上(类似图层) draw.Draw(m, b, img, image.ZP, draw.Src) draw.Draw(m, wmb_img.Bounds().Add(offset), wmb_img, image.ZP, draw.Over) //生成新图片new.jpg,并设置图片质量 imgw, err := os.Create("new.jpg") jpeg.Encode(imgw, m, &jpeg.Options{100}) defer imgw.Close() fmt.Println("添加水印图片结束请查看") } 

draw.Draw方法既然可以按调用的顺序不同实现的也不同,可以用这个扩展让多个基本的图片靠位置与层叠方式来拼成一个图,最适合表情包制作。另外感觉有些滤镜效果结合png包应该也可以用他做出来。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM