使用PIL为图片添加水印
下面是我们想要添加水印的图片:
图片水印:
效果图如下:
ps:对图片添加字体时,需指定字体文件,如 simsun.ttc
windows中在 C:\Windows\Fonts 路径下。
linux中在 /usr/share/fonts 路径下,若不存在时需先去下载,linux中字体文件默认没有中文字体(最简单的方法,大家可以将windows中的字体文件复制到linux上的字体文件路径下)。
若图片为jpg格式的话,需将图片结尾的jpg转换为png,否则使用RGBA转换图片时会报错。
代码如下:
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')
本文来自博客园,作者:长情不羁的五年,转载请注明原文链接:https://www.cnblogs.com/fivenian/p/17671060.html