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