Skip to content
This repository was archived by the owner on Jan 12, 2023. It is now read-only.

Commit a00186a

Browse files
committed
update 2021年07月23日 18:29:34
0 parents  commit a00186a

File tree

4 files changed

+179
-0
lines changed

4 files changed

+179
-0
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
给文件夹内图片添加水印的工具
2+
3+
源码来自 : https://blog.csdn.net/czy279470138/article/details/96993285
4+
5+
仅作部分修改
6+
7+
```
8+
./main.exe -name "1.png"
9+
```

logo.png

1.25 KB
Loading

main.go

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package main
2+
import (
3+
"flag"
4+
"fmt"
5+
"image"
6+
"image/draw"
7+
"image/jpeg"
8+
"image/png"
9+
"log"
10+
"net/http"
11+
"os"
12+
)
13+
14+
var Input_name = flag.String("name", "null", "输入文件名")
15+
16+
func main() {
17+
flag.Parse()
18+
19+
for i := 0; i != flag.NArg(); i++ {
20+
fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
21+
}
22+
23+
if *Input_name == ""{
24+
fmt.Println("文件夹?")
25+
}else {
26+
fmt.Println("目标图片:",*Input_name)
27+
imgwater()
28+
}
29+
30+
}
31+
32+
func imgwater() {
33+
srcImg := *Input_name // 原始图片
34+
imgWaterMarkPath := "./logo.png" // 水印图片
35+
36+
// 原始图片
37+
originalImg, err := os.Open(srcImg)
38+
if err != nil {
39+
fmt.Println("打开原始图片出错")
40+
}
41+
//
42+
defer originalImg.Close()
43+
44+
// 水印图片
45+
waterMark, err := os.Open(imgWaterMarkPath)
46+
if err != nil {
47+
fmt.Println("打开水印图片出错")
48+
}
49+
defer waterMark.Close()
50+
51+
waterMarkImg, err := png.Decode(waterMark)
52+
if err != nil {
53+
fmt.Println("把水印图片解码为结构体时出错")
54+
}
55+
56+
buff := make([]byte, 512)
57+
58+
file, err := os.Open(srcImg)
59+
if err != nil {
60+
log.Println(err)
61+
}
62+
63+
_, err = file.Read(buff)
64+
if err != nil {
65+
log.Println(err)
66+
}
67+
68+
imgType := http.DetectContentType(buff)
69+
70+
if imgType == "image/jpeg" {
71+
fmt.Println("这是JPG文件")
72+
imgJpeg, err := jpeg.Decode(originalImg)
73+
if err != nil {
74+
fmt.Println("把jpeg图片解码为结构体时出错")
75+
}
76+
77+
b := imgJpeg.Bounds()
78+
waterMarkWidth := b.Max.X
79+
waterMarkHeight := b.Max.Y
80+
fmt.Println("jpeg原始图片宽", waterMarkWidth, "jpeg原始图片高", waterMarkHeight)
81+
82+
m := image.NewRGBA(b)
83+
84+
// 原始图片
85+
draw.Draw(m, b, imgJpeg, image.ZP, draw.Src)
86+
// 水印图片
87+
for i := 0; i < waterMarkWidth; i++ {
88+
offsetWidth := 1000 * i
89+
if offsetWidth < waterMarkWidth {
90+
for j := 0; j < waterMarkHeight; j++ {
91+
offsetHeight := 1000 * j
92+
if offsetHeight < waterMarkHeight {
93+
offset := image.Pt(offsetWidth, offsetHeight)
94+
draw.Draw(m, waterMarkImg.Bounds().Add(offset), waterMarkImg, image.ZP, draw.Over)
95+
fmt.Println("jpegOffset", offset)
96+
}
97+
}
98+
}
99+
}
100+
101+
// 生成新图片new.jpg,并设置图片质量 100
102+
imgNew, err := os.Create("new.jpg") // 这里可以设置为上传图片 srcImg
103+
if err != nil {
104+
log.Println(err)
105+
}
106+
107+
err = jpeg.Encode(imgNew, m, &jpeg.Options{100})
108+
if err != nil {
109+
log.Println(err)
110+
}
111+
// png.Encode(imgw, m)
112+
defer imgNew.Close()
113+
114+
fmt.Println("添加JPG水印图片结束请查看")
115+
}
116+
117+
if imgType == "image/png" {
118+
fmt.Println("这是PNG文件")
119+
imgPng, err := png.Decode(originalImg)
120+
if err != nil {
121+
fmt.Println("把PNG图片解码为结构体时出错")
122+
}
123+
b := imgPng.Bounds()
124+
waterMarkWidth := b.Max.X
125+
waterMarkHeight := b.Max.Y
126+
fmt.Println("png原始图片宽", waterMarkWidth, "png原始图片高", waterMarkHeight)
127+
128+
m := image.NewRGBA(b)
129+
130+
// 原始图片
131+
draw.Draw(m, b, imgPng, image.ZP, draw.Src)
132+
133+
// 水印图片
134+
for i := 0; i < waterMarkWidth; i++ {
135+
// resWidth := 0
136+
offsetWidth := 1000 * i
137+
// fmt.Println(offsetWidth)
138+
if offsetWidth < waterMarkWidth {
139+
for j := 0; j < waterMarkHeight; j++ {
140+
offsetHeight := 1000 * j
141+
if offsetHeight < waterMarkHeight {
142+
offset := image.Pt(offsetWidth, offsetHeight)
143+
draw.Draw(m, waterMarkImg.Bounds().Add(offset), waterMarkImg, image.ZP, draw.Over)
144+
fmt.Println("pngOffset", offset)
145+
}
146+
}
147+
}
148+
}
149+
150+
// 生成新图片new.png
151+
imgNew, err := os.Create("./new.png") // 这里可以设置为上传图片 srcImg
152+
if err != nil {
153+
log.Println(err)
154+
}
155+
156+
err = png.Encode(imgNew, m)
157+
if err != nil {
158+
log.Println(err)
159+
}
160+
defer imgNew.Close()
161+
fmt.Println("添加PNG水印图片结束请查看")
162+
}
163+
if imgType == "image/gif" {
164+
fmt.Println("暂不支持 gif 格式。。。")
165+
}
166+
}

push.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
git add -A
3+
git commit -m "update $(date)"
4+
git push

0 commit comments

Comments
 (0)