本文所涉及所有资源均在传知代码平台可获取。
概述
PIL是Python的第三方图像处理库,其中Image模块作为PIL库的基本核心类,可以用来例如加载图像和创建新图像等用途,而说到给在图片上添加水印,要用到的方法就是ImageDraw.Draw.text(),里面有包括6个参数,其中经常被用到的也就下面四个
xy:添加水印的坐标,x坐标和y坐标
text:具体添加水印的文本内容
fill:水印样式,包括颜色、透明度等
font:字体大小
演示效果
原始图片
添加水印
核心逻辑
from PIL import Image, ImageDraw, ImageFont
def add_watermark(input_image_path, output_image_path, watermark_text, font_path, position=(1, 1), font_size=40):
"""=
在图片上添加水印
:param input_image_path: 图片路径
:param watermark_text: 水印文本
:param font_path: 字体文件路径
:param font_size: 字体大小,默认为 40
:param opacity: 水印透明度,默认为 0.5
:param fill: 水印颜色,默认为白色半透明
"""
# 打开图像
im = Image.open(input_image_path)
# 创建一个可用于绘制的对象
draw = ImageDraw.Draw(im)
# 设置字体
# font = ImageFont.load_default() # 使用默认字体,中文有问题
font = ImageFont.truetype(font_path, font_size)
# 计算文本的位置(适配不同大小图片的位置)
image_width, image_height = im.size
text_bbox = draw.textbbox((0, 0), watermark_text, font=font)
text_width, text_height = text_bbox[2] - text_bbox[0], text_bbox[3] - text_bbox[1]
x = int((image_width - text_width) * position[0])
y = int((image_height - text_height) * position[1])
# 添加水印
draw.text((x, y), watermark_text, font=font)
# 保存图像
im.save(output_image_path)
# 使用示例,将文本放在右下角
add_watermark('dog.png', 'watermarked_image.png', '传知科技|wiswing', 'simsun.ttc', position=(1, 1), font_size=40)
使用方式
1、上传原始图片
2、输入要添加的水印文字
3、选择水印的相对位置(可选)
#左上角
position = (0, 0)
#左下角
position = (0, 1)
#中间
position = (0.5, 0.5)
#右上角
position = (1, 0)
#右下角
position = (1, 1)
部署方式
python add-watermark.py
感觉不错,[点击我](www.aspiringcode.com/content?id=…