package main import ( "fmt" "image" "image/color" "image/draw" "image/jpeg" "io/ioutil" "os" "github.com/golang/freetype" ) // 創建寬 500 高 300 的圖片 const ( w = 500 h = 300 ) func main() { //返回一個矩形 rectangle := image.Rect(0, 0, w, h) rgba := image.NewRGBA(rectangle) // 設置一條白色的斜線 for y := 0; y < h; y++ { rgba.Set(y, y, color.RGBA{255, 255, 255, 1}) } // 文字水印 fontbyte, err := ioutil.ReadFile("./simhei.ttf") if err != nil { fmt.Println("ioutil.ReadFile error : ", err) return } font, err := freetype.ParseFont(fontbyte) if err != nil { fmt.Println("freetype.ParseFont error : ", err) return } // 創建一個新的上下文 context := freetype.NewContext() context.SetDPI(70) // 設置屏幕分辨率,單位為每英寸點數。 context.SetClip(rgba.Bounds()) //設置用於繪制的剪輯矩形。 context.SetDst(rgba) //設置繪制操作的目標圖像。 context.SetFont(font) //設置用於繪制文本的字體。 context.SetFontSize(16) //以點為單位設置字體大小(如“12點字體”)。 context.SetSrc(image.NewUniform(color.RGBA{255, 255, 255, 1})) //設置用於繪制操作的源圖像 pt := freetype.Pt(10, 260) //從一個以像素度量的坐標對轉換為一個固定的點 context.DrawString("文字水印", pt) // 圖片水印 img, _ := os.Open("./img.jpg") defer img.Close() img1, _ := jpeg.Decode(img) //讀取一個JPEG圖像並將其作為image.Image返回 offset := image.Pt(300, 10) draw.Draw(rgba, img1.Bounds().Add(offset), img1, image.ZP, draw.Over) //創建圖片 file, err := os.Create("./text.jpg") if err != nil { fmt.Println("os.Open error : ", err) return } // 將圖像寫入file //&jpeg.Options{100} 取值范圍[1,100],越大圖像編碼質量越高 jpeg.Encode(file, rgba, &jpeg.Options{100}) defer file.Close() }
效果: