前言

找了好久打水印的工具
结果发现Hexo直接有插件
那就来搞一下吧
然后翻车了
还是老老实实跑脚本吧

安装插件 [失败]

只要还是这个插件依赖过时了

1
npm install hexo-images-watermark

图片添加水印脚本

安装 Python 依赖组件

1
python3 -m pip install pillow

面对 ChatGPT 编程

  • 常量为可以按照个人需求修改的值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# -*- coding: utf-8 -*-
import os
from PIL import Image, ImageDraw, ImageFont, ImageOps
import colorsys
import math

# 常量
WATERMARK_SIZE = (200, 50) # 水印图像尺寸
FONT_SIZE = 30 # 水印文字的字体大小
WATERMARK_OPACITY = 0.5 # 水印的透明度,范围从0(完全透明)到1(完全不透明)
CUSTOM_WATERMARK_TEXT = u'您的水印文字' # 自定义水印文字
WATERMARK_ANGLE = 45 # 水印图片角度,可根据需求调整
FONT_FILE = os.path.join(os.path.dirname(__file__), 'your_custom_font.ttf') # 替换为您的字体文件路径

def rainbow_color(hue):
# 根据给定的色调值生成彩虹颜色。
rgb = colorsys.hsv_to_rgb(hue, 1, 1)
return tuple(int(val * 255) for val in rgb)

def create_watermark_image(text):
# 创建带有彩虹色文本的水印图像。
print("正在创建水印图像...")
font = ImageFont.truetype(FONT_FILE, FONT_SIZE)
watermark_image = Image.new('RGBA', WATERMARK_SIZE, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark_image)

hue = 0
x_position = 0

for char in text:
rainbow_rgb = rainbow_color(hue)
rainbow_rgb_with_alpha = (*rainbow_rgb, int(255 * WATERMARK_OPACITY))

draw.text((x_position, 0), char, fill=rainbow_rgb_with_alpha, font=font)
x_position += 15

hue = (hue + 0.02) % 1

return watermark_image.rotate(WATERMARK_ANGLE, expand=True)

def apply_watermark(image, watermark):
# 将水印居中放置在原图片上。
print("正在应用水印...")
watermarked_im = image.copy()
watermark_size = watermark.size
image_size = watermarked_im.size

x_position = (image_size[0] - watermark_size[0]) // 2
y_position = (image_size[1] - watermark_size[1]) // 2

watermark_position = (x_position, y_position)

watermarked_im.paste(watermark, watermark_position, watermark)

return watermarked_im

def apply_watermark_to_images(folder_path, watermark_text):
# 将水印应用于给定文件夹中的所有图像。
watermark = create_watermark_image(watermark_text)

for root, _, files in os.walk(folder_path):
for filename in files:
file_path = os.path.join(root, filename)
if is_image_file(file_path):
try:
print(f"正在处理 {filename}...")
im = Image.open(file_path)
watermarked_im = im.copy()

watermarked_im = apply_watermark(watermarked_im, watermark)

watermarked_im.save(file_path)
print(f"{filename} 已完成处理")
except Exception as e:
print(f"处理 {file_path} 时出错:{e}")

def is_image_file(file_path):
# 检查给定文件是否具有图像扩展名。
image_extensions = ['.jpg', '.jpeg', '.png']
return any(file_path.lower().endswith(ext) for ext in image_extensions)

if __name__ == '__main__':
current_folder = os.getcwd()
watermark_text = CUSTOM_WATERMARK_TEXT
print("开始将水印应用于图像...")
apply_watermark_to_images(current_folder, watermark_text)
print("所有图像处理完成")

训练前作者大大脚本

  • 感谢韦阳大佬的脚本

不直接使用大佬的脚本
是因为该脚本存在局限性
毕竟适合自己才是最好的
再次感谢韦阳大佬的启蒙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
import sys
import glob
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont


def watermark(post_name):
if post_name == 'all':
post_name = '*'
dir_name = 'source/_posts/' + post_name + '/*'
for files in glob.glob(dir_name):
im = Image.open(files)
if len(im.getbands()) < 3:
im = im.convert('RGB')
print(files)
font = ImageFont.truetype('STSONG.TTF', max(30, int(im.size[1] / 20)))
draw = ImageDraw.Draw(im)
draw.text((im.size[0] / 2, im.size[1] / 2),
u'@yourname', fill=(0, 0, 0), font=font)
im.save(files)


if __name__ == '__main__':
if len(sys.argv) == 2:
watermark(sys.argv[1])
else:
print('[usage] <input>')

脚本运行效果

脚本

1
python3 watermark.py

照片

参考 & 引用

https://godweiyang.com/2018/04/13/hexo-blog/#toc-heading-23