Python 给图片加水印
时间: 2026-03-11 10:21:44
(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)
📝 Python 给图片加水印(备案专用)
方法一:用 PIL/Pillow(最简单)
from PIL import Image, ImageDraw, ImageFont import os
def add_watermark(input_image_path, output_image_path, watermark_text): # 打开图片 image = Image.open(input_image_path) # 创建可画图的对象 draw = ImageDraw.Draw(image) # 获取图片尺寸 width, height = image.size # 设置字体大小(图片宽度的1/20左右) font_size = int(width / 20) try: # Mac系统字体路径,不行就换下面这个 font = ImageFont.truetype("/System/Library/Fonts/Supplemental/Songti.ttc", font_size) except: font = ImageFont.load_default() # 获取文字尺寸 text_bbox = draw.textbbox((0, 0), watermark_text, font=font) text_width = text_bbox[2] - text_bbox[0] text_height = text_bbox[3] - text_bbox[1] # 计算位置(斜着放,防偷) position = ((width - text_width) // 2, (height - text_height) // 2) # 画半透明水印 # 创建一个透明图层 watermark = Image.new('RGBA', image.size, (0,0,0,0)) watermark_draw = ImageDraw.Draw(watermark) # 添加半透明文字(斜着放可以旋转,这里简单居中) watermark_draw.text(position, watermark_text, fill=(255,255,255,128), font=font) # 合并原图和透明水印 watermarked = Image.alpha_composite(image.convert('RGBA'), watermark) # 保存 watermarked.convert('RGB').save(output_image_path, 'JPEG', quality=95) print(f"✅ 水印已添加: {output_image_path}")
# 用起来 add_watermark("你的照片.jpg", "加了水印的照片.jpg", "仅限备案使用 2026-03-11")
方法二:批量处理文件夹所有图片
import os from PIL import Image, ImageDraw, ImageFont
def batch_add_watermark(folder_path, watermark_text): # 支持的图片格式 extensions = ('.jpg', '.jpeg', '.png', '.heic') for filename in os.listdir(folder_path): if filename.lower().endswith(extensions): input_path = os.path.join(folder_path, filename) # 输出文件名加个_watermarked name, ext = os.path.splitext(filename) output_path = os.path.join(folder_path, f"{name}_水印{ext}") try: add_watermark(input_path, output_path, watermark_text) except Exception as e: print(f"❌ 处理失败 {filename}: {e}")
# 用起来 batch_add_watermark("/Users/你的名字/Desktop/要加水的照片/", "仅限备案使用")
方法三:旋转水印更防偷
from PIL import Image, ImageDraw, ImageFont import math
def add_rotated_watermark(input_path, output_path, text): img = Image.open(input_path).convert('RGBA') width, height = img.size # 创建透明图层 txt_layer = Image.new('RGBA', img.size, (255,255,255,0)) draw = ImageDraw.Draw(txt_layer) # 设置字体 font_size = int(min(width, height) / 15) try: font = ImageFont.truetype("/System/Library/Fonts/Supplemental/Songti.ttc", font_size) except: font = ImageFont.load_default() # 获取文字尺寸 text_bbox = draw.textbbox((0, 0), text, font=font) text_width = text_bbox[2] - text_bbox[0] text_height = text_bbox[3] - text_bbox[1] # 创建一个大画布放旋转后的文字 text_canvas = Image.new('RGBA', (text_width + 100, text_height + 100), (255,255,255,0)) text_draw = ImageDraw.Draw(text_canvas) text_draw.text((50, 50), text, fill=(255,255,255,128), font=font) # 旋转文字 rotated = text_canvas.rotate(45, expand=1) # 计算位置(平铺多个水印) for i in range(0, width, rotated.width): for j in range(0, height, rotated.height): txt_layer.paste(rotated, (i, j), rotated) # 合并 result = Image.alpha_composite(img, txt_layer) result.convert('RGB').save(output_path, 'JPEG', quality=90) print(f"✅ 完成: {output_path}")
# 用起来 add_rotated_watermark("照片.jpg", "带水印.jpg", "仅限备案使用")
📦 先装这些傻逼库
pip install Pillow # 如果要处理HEIC格式(iPhone拍的) pip install pillow-heif
⚠️ 注意事项
1. 字体路径:Mac 一般在 /System/Library/Fonts/ 里,Windows 在 C:/Windows/Fonts/,找不到就用默认字体
2. 透明效果:fill=(255,255,255,128) 最后那个128是透明度(0-255)
3. HEIC格式:iPhone拍的,要装 pillow-heif 才能处理
拿去用吧! 有问题继续骂,我给你改代码!