Home  >  Article  >  Backend Development  >  Golang Image Processing: Learn How to Add Watermarks and Text

Golang Image Processing: Learn How to Add Watermarks and Text

WBOY
WBOYOriginal
2023-08-17 08:41:081963browse

Golang Image Processing: Learn How to Add Watermarks and Text

Golang Image Processing: Learn how to add watermarks and text

Introduction:
In the modern era of digitalization and social media, image processing has become an important skills. Whether for personal use or business operations, adding watermarks and text are common needs. In this article, we will explore how to use Golang for image processing and learn how to add watermarks and text.

Background:
Golang is an open source programming language known for its concise syntax, efficient performance and powerful concurrency capabilities. It has become one of the preferred languages ​​for many developers. In Golang, there are some powerful third-party libraries that make image processing easy and efficient.

Add watermark:
Adding watermark is a common technique to protect the copyright of personal or commercial images. The following is an example that shows how to use Golang to add a watermark to an image:

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)
}

The above code first opens an image file named "original.jpg". It is then decoded into an image.Image object, then a new RGBA canvas is created, and the original image is drawn onto the canvas. Finally, a 100x50 sized watermark was created and drawn to the lower right corner of the canvas. The final generated image with watermark is saved as "output.jpg".

Add text:
Adding text is another common image processing requirement. It can be used to add titles, descriptions or other instructions. Here is an example that shows how to add text on an image using 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)
}

The above code is similar to the example of adding a watermark, but we use the third-party library freetype to add text. First, an image file named "original.jpg" is opened and then decoded into an image.Image object. Then a new RGBA canvas is created and the original image is drawn onto the canvas. Then, a TrueType font file is loaded and parsed into a freetype.Font object. Created a freetype.Context object and set drawing parameters such as font and font size. Finally, the DrawString function is called to add text to the canvas. The final generated image is saved as "output.jpg".

Conclusion:
As a powerful programming language, Golang has a wealth of third-party libraries and tools, making image processing simple and efficient. This article introduces how to use Golang to add watermarks and text to images, and provides corresponding code examples. I hope this article can help readers learn how to use Golang for image processing and play a role in practical applications.

The above is the detailed content of Golang Image Processing: Learn How to Add Watermarks and Text. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn