ホームページ  >  記事  >  バックエンド開発  >  Golang 画像処理: 透かしとテキストを追加する方法を学ぶ

Golang 画像処理: 透かしとテキストを追加する方法を学ぶ

WBOY
WBOYオリジナル
2023-08-17 08:41:081900ブラウズ

Golang 画像処理: 透かしとテキストを追加する方法を学ぶ

Golang 画像処理: 透かしとテキストを追加する方法を学ぶ

はじめに:
デジタル化とソーシャル メディアの現代では、画像処理が重要になっています。スキル。個人使用であろうとビジネス運営であろうと、透かしやテキストの追加は一般的なニーズです。この記事では、画像処理に Golang を使用する方法を検討し、透かしとテキストを追加する方法を学びます。

背景:
Golang は、簡潔な構文、効率的なパフォーマンス、強力な同時実行機能で知られるオープンソース プログラミング言語です。これは多くの開発者にとって好まれる言語の 1 つとなっています。 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。