我这里需要给批量从指定文件夹下复制图片并存储到新的文件夹下,同时要给图片打上文字水印
原本文件所在位置
需要达到的效果
上面/001,/002,/003都是复制生成的,但是水印是不一样的
代码如下
这里依赖外部库github.com/golang/freetype
安装这两个库的命令为
go get github.com/golang/freetype
目录结构为
picture.go文件代码如下
package main
import (
"fmt"
"os"
"path/filepath"
"picture/watermark"
"strconv"
)
/*批量给图片添加文本水印*/
func main() {
var files []string
root := "origin/"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
files = append(files, path)
return nil
})
if err != nil {
panic(err)
}
str1 := "第"
chapter := ""
str2 := "章图:"
SavePath := ""
for i := 1; i <= 100; i++ {
SavePath = fmt.Sprintf("./0%02d", i)
chapter = fmt.Sprintf("%02d", i)
count := 0
for _, file := range files {
if count == 0 {
count++
continue
}
if count > 13 {
break
}
strCount := strconv.Itoa(count)
fmt.Println(file)
arr := make([]textwatermark.FontInfo, 0)
str2 := textwatermark.FontInfo{
Size: 108, Message: str1 + chapter + str2 + strCount, Position: textwatermark.Center, Dx: 20, Dy: 40, R: 255, G: 255, B: 0, A: 255}
arr = append(arr, str2)
//加水印图片路径
//fileName := "001.jpg"
w := new(textwatermark.Water)
w.Pattern = ""
textwatermark.Ttf = "simkai.ttf" //字体路径
err := w.New(SavePath, file, arr)
if err != nil {
fmt.Println(err)
}
count++
}
}
}
包watermark/textwatermark
代码如下
package textwatermark
import (
"errors"
"fmt"
"github.com/golang/freetype"
"image"
"image/color"
"image/draw"
"image/gif"
"image/jpeg"
"image/png"
"io/ioutil"
"math/rand"
"os"
"strings"
"time"
)
// 水印的位置
const (
TopLeft int = iota
TopRight
BottomLeft
BottomRight
Center
)
//字体路径
var Ttf string
type Water struct {
Pattern string //增加按时间划分的子目录:默认没有时间划分的子目录
}
func (w *Water) New(SavePath, fileName string, typeface