前言
找了好久打水印的工具
结果发现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
| import os from PIL import Image, ImageDraw, ImageFont, ImageOps import colorsys import math
WATERMARK_SIZE = (200, 50) FONT_SIZE = 30 WATERMARK_OPACITY = 0.5 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
| 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>')
|
脚本运行效果
脚本
照片
参考 & 引用
https://godweiyang.com/2018/04/13/hexo-blog/#toc-heading-23