首頁  >  文章  >  後端開發  >  Golang圖片處理:學習如何添加浮水印和文字

Golang圖片處理:學習如何添加浮水印和文字

WBOY
WBOY原創
2023-08-17 08:41:081962瀏覽

Golang圖片處理:學習如何添加浮水印和文字

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn