发布时间:2024-11-23 16:16:45
在现代社交媒体充斥着图片的时代,给照片添加水印是一种常用的方法来保护个人版权和品牌。而使用golang来给图片加水印不仅简单高效,还可以方便地进行批量处理。本文将介绍如何利用golang给图片添加水印。
首先,我们需要安装"golang.org/x/image"这个包,它提供了一些操作图像的功能。使用如下命令来安装该包:
go get golang.org/x/image
安装完毕后,我们就可以开始编写代码了。
在给图片加水印之前,我们首先需要打开要处理的图片文件,并读取其内容。使用如下代码来实现:
import (
"image"
"image/draw"
_ "image/jpeg"
"os"
)
func openImageFile(path string) (image.Image, error) {
file, err := os.Open(path)
if err != nil {
return nil, err
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
return nil, err
}
return img, nil
}
上述代码中,我们使用了"os"和"image"两个包来打开和解码图片文件。注意,我们没有指定文件格式,因为这个包会自动根据文件的扩展名来选择合适的解码器。
我们已经成功打开了要处理的图片文件,接下来就是将水印添加到图片上。以下是一个简单的函数,用于在图片的右下角添加文本水印:
import (
"fmt"
"image/color"
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
"golang.org/x/image/font"
"io/ioutil"
"path/filepath"
)
func addTextWatermark(img image.Image, text string) (image.Image, error) {
fontData, err := ioutil.ReadFile("font.ttf")
if err != nil {
return nil, err
}
font, err := freetype.ParseFont(fontData)
if err != nil {
return nil, err
}
bounds := img.Bounds()
width := bounds.Dx()
height := bounds.Dy()
context := freetype.NewContext()
context.SetDst(image.NewRGBA(bounds))
context.SetSrc(img)
context.SetDPI(72)
context.SetFont(font)
context.SetFontSize(48)
context.SetClip(bounds)
context.SetDst(image.NewUniform(color.RGBA{255, 255, 255, 255}))
context.SetHinting(font.HintingFull)
pt := freetype.Pt(width-300, height-50)
_, err = context.DrawString(text, pt)
if err != nil {
return nil, err
}
return context.Image(), nil
}
上述代码中,我们使用了"github.com/golang/freetype"这个库来渲染文本水印。首先,我们需要加载一个TrueType字体文件,这里我们假设字体文件名为"font.ttf"。然后,我们创建了一个freetype.Context对象,设置了一些绘制文本所需的参数,比如字体、字号、位置等。最后,我们调用DrawString函数将文本渲染在图片上并返回处理后的图片。
至此,我们已经完成了所有的代码编写。接下来,我们可以使用以下代码测试上述函数:
func main() {
img, err := openImageFile("input.jpg")
if err != nil {
fmt.Println(err)
return
}
watermarkImg, err := addTextWatermark(img, "Watermark")
if err != nil {
fmt.Println(err)
return
}
err = saveImage(watermarkImg, "output.jpg")
if err != nil {
fmt.Println(err)
return
}
}
在上述代码中,我们首先使用openImageFile函数打开了一个名为"input.jpg"的图片文件,然后调用addTextWatermark函数给图片添加了一个文本水印,最后将处理后的图片保存到"output.jpg"文件中。
运行上述代码后,你将会在当前目录下看到生成的"output.jpg"文件,其中包含了带有水印的图片。
综上所述,利用golang给图片加水印非常简单。通过安装"golang.org/x/image"包,我们可以轻松地打开和处理图片。通过使用"freetype"库,我们可以方便地在图片上添加文本水印。希望本文能对你有所帮助,谢谢阅读!