Golang圖片處理:學習如何添加浮水印和文字
引言:
在現代數位化和社群媒體的時代,圖片處理已經成為了一項重要的技能。無論是個人使用還是商務運營,添加浮水印和文字都是常見的需求。在本文中,我們將探討使用Golang進行圖片處理的方法,學習如何添加浮水印和文字。
背景:
Golang是一門開源的程式語言,以其簡潔的語法、高效的性能和強大的並發能力而聞名。它已經成為許多開發者的首選語言之一。在Golang中,有一些強大的第三方函式庫,使得圖片處理變得容易且有效率。
新增浮水印:
新增浮水印是一種保護個人或商業圖片版權的常見技術。下面是一個範例,展示如何使用Golang新增浮水印到一張圖片上:
package main import ( "image" "image/draw" "image/jpeg" "os" ) func main() { // 打开原始图片 file, err := os.Open("original.jpg") if err != nil { panic(err) } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { panic(err) } // 创建一个画布 bounds := img.Bounds() canvas := image.NewRGBA(bounds) // 绘制原始图片到画布上 draw.Draw(canvas, bounds, img, image.Point{}, draw.Src) // 添加水印 watermark := image.NewRGBA(image.Rect(0, 0, 100, 50)) draw.Draw(canvas, image.Rect(bounds.Dx()-100, bounds.Dy()-50, bounds.Dx(), bounds.Dy()), watermark, image.Point{}, draw.Src) // 保存处理后的图片 output, err := os.Create("output.jpg") if err != nil { panic(err) } defer output.Close() // 编码保存到文件 jpeg.Encode(output, canvas, nil) }
以上程式碼首先開啟了一張名為"original.jpg"的圖片檔案。然後將其解碼為一個image.Image
對象,接著創建了一個新的RGBA畫布,並將原始圖片繪製到畫布上。最後,創建了一個100x50大小的浮水印,並將其繪製到畫布的右下角。最終產生的帶有浮水印的圖片被儲存為"output.jpg"。
新增文字:
新增文字是另一個常見的圖片處理需求,它可以用來新增標題、描述或其他說明。下面是一個範例,展示如何使用Golang在圖片上新增文字:
package main import ( "image" "image/draw" "image/jpeg" "os" "github.com/golang/freetype" "github.com/golang/freetype/truetype" "golang.org/x/image/font" ) func main() { // 打开原始图片 file, err := os.Open("original.jpg") if err != nil { panic(err) } defer file.Close() // 解码图片 img, _, err := image.Decode(file) if err != nil { panic(err) } // 创建一个画布 bounds := img.Bounds() canvas := image.NewRGBA(bounds) // 绘制原始图片到画布上 draw.Draw(canvas, bounds, img, image.Point{}, draw.Src) // 添加文字 fontBytes, err := os.ReadFile("font.ttf") if err != nil { panic(err) } font, err := freetype.ParseFont(fontBytes) if err != nil { panic(err) } context := freetype.NewContext() context.SetDPI(72) context.SetFont(font) context.SetFontSize(24) context.SetClip(bounds) context.SetDst(canvas) context.SetSrc(image.Black) pt := freetype.Pt(10, 10+int(context.PointToFixed(24)>>6)) context.DrawString("Hello, Golang!", pt) // 保存处理后的图片 output, err := os.Create("output.jpg") if err != nil { panic(err) } defer output.Close() // 编码保存到文件 jpeg.Encode(output, canvas, nil) }
以上程式碼與新增浮水印的範例類似,但我們使用了第三方函式庫freetype來新增文字。首先開啟了一個名為"original.jpg"的圖片文件,然後解碼為image.Image物件。接著創建了一個新的RGBA畫布,並將原始圖片繪製到畫布上。然後,載入了一個TrueType字型檔案並將其解析為freetype.Font物件。建立了一個freetype.Context對象,並設定了字體、字號等繪製參數。最後,呼叫了DrawString函數,在畫布上加入了文字。最終產生的圖片被儲存為"output.jpg"。
結語:
Golang作為一門強大的程式語言,擁有豐富的第三方函式庫和工具,使得圖片處理變得簡單而有效率。本文介紹如何使用Golang添加浮水印和文字到圖片上,並提供了相應的程式碼範例。希望本文可以幫助讀者學習如何使用Golang進行圖片處理,並在實際應用中發揮作用。
以上是Golang圖片處理:學習如何添加浮水印和文字的詳細內容。更多資訊請關注PHP中文網其他相關文章!