使用PIL为图片添加水印

发布时间 2023-09-01 17:23:02作者: 长情不羁的五年

使用pillow库为图片添加文件或者图片水印

 

下面是我们想要添加水印的图片:

 

图片水印:

 

 

 

 

效果图如下:

 

 

 

 

ps:对图片添加字体时,需指定字体文件,如 simsun.ttc

windows中在 C:\Windows\Fonts 路径下

linux中在 /usr/share/fonts 路径下,若不存在时需先去下载,linux中字体文件默认没有中文字体(最简单的方法,大家可以将windows中的字体文件复制到linux上的字体文件路径下)。

 

代码如下:

from PIL import Image, ImageFont, ImageDraw
import os
​
​
def image_add_watermark(image_path="", logo_path=""):
    # 读取上传的图片
    # image_file = request.files
    # image_name = image_file.filename
    # image = Image.open(io.BytesIO(image_file.read()))
    image = Image.open(image_path)
    image_name = 'xx.png'
    # 降低像素
    image = image.convert('RGBA').resize((image.width, image.height), Image.ANTIALIAS)
    # 可以指定图片的保存路径
    image_path = os.path.join('image_file', image_name)
    image.save(image_path)
​
    # 添加文字水印
    add_watermark(image_path, '长情不羁的五年', 'simsun.ttc', font_size=150)
    # 添加图片水印
    # add_watermark_logo(image_path, logo_path)
    print('执行完成》》》》》》》》》》》》')
​
​
def add_watermark(image_path, text, font_path, font_size=40, fill=(255, 255, 255, 128)):
    """
    在图片上添加水印
    :param image_path: 图片路径
    :param text: 水印文本
    :param font_path: 字体文件路径
    :param font_size: 字体大小,默认为 40
    :param fill: 水印颜色,默认为白色半透明
    :return: None
    """
    with Image.open(image_path) as image:
        draw = ImageDraw.Draw(image)
        width, height = image.size
        font = ImageFont.truetype(font_path, font_size)
        text_width, text_height = draw.textsize(text, font=font)
        x = int((width - text_width) / 2)
        y = int((height - text_height) / 2)
        draw.text((x, y), text, font=font, fill=fill)
        image.save(image_path)
​
​
def add_watermark_logo(image_path, logo_path):
    """
    在图片上添加水印
    :param image_path: 图片路径
    :param logo_path: 水印路径
    :return: None
    """
    with Image.open(image_path) as image:
        watermark = Image.open(logo_path).convert("RGBA").resize((image.width // 2, image.height // 3))  # 指定图片的大小
        image.paste(watermark, (0, 0), watermark)  # 添加的水印相对于图片的位置(x, y), 基于图片左上角
        image.show()
        image.save(image_path)
​
​
image_add_watermark('mm.jpg', 'logo.png')