【Python】【进阶篇】七、Pillow的图片添加水印

目录

  • 七、Pillow的图片添加水印
    • 7.1 ImageDraw
    • 7.2 ImageFont

七、Pillow的图片添加水印

为图片添加水印能够在一定程度上避免其他人滥用您的图片,这是保护图片版权的一种有效方式。

Pillow 库提供了添加水印的方法,操作简单,易学、易用。下面我们讲解如何使用 PIilow 给图片添加水印。

水印是附着在原图片上一段文字信息,因此添加水印的过程中会涉及两个问题:

  1. 如何使文字信息附着在图片上;
  2. 如何绘制文字信息。

只要解决了这两个问题就可以成功添加水印。Pillow 提供的ImageDrawImageFont模块成功解决了上述问题。

7.1 ImageDraw

PIL.ImageDraw 模块提供了一系列的绘图方法,通过该模块可以创建一个新的图形,或者在现有的图像上再绘制一个图形,从而起到对原图注释和修饰的作用。

语法格式: draw = ImageDraw.Draw(im)

ImageDraw 对象的常用方法如下 -

名称 说明
text 在图像上绘制文字
line 绘制直线、线段
eclipse 绘制椭圆形
rectangle 绘制矩形
polygon 绘制多边形

表格中第一个方法 text() 需要与 ImageFont 模块一起使用。

语法格式:draw.rectangle(xy, fill=None, outline=None)

  • xy:元组参数值,以图像的左上角为坐标原点,表示矩形图的位置、图形大小的坐标序列,形如 ((x1,y1,x2,y2));
  • fill:矩形图的背景填充色;
  • outline:矩形图的边框线条颜色。
from PIL import Image, ImageDraw

# 创建 Image 对象,当做背景图
im = Image.new('RGB', (200, 200), color='gray')
# 创建 ImageDraw 对象
draw = ImageDraw.Draw(im)
# 以左上角为原点,绘制矩形。元组坐标序列表示矩形的位置、大小;fill设置填充色为红色,outline设置边框线为黑色
draw.rectangle((50, 100, 100, 150), fill=(255, 0, 0), outline=(0, 0, 0))
# 查看原图片
im.show()
# 保存图片
im.save("./添加矩形图.png")

7.2 ImageFont

PIL.ImagreFont 模块通过加载不同格式的字体文件,从而在图像上绘制出不同类型的文字。

语法格式:font = ImageFont.truetype(font='字体文件路径', size=字体大小)

图片上添加文本,还需要使用 ImageDraw.text() 方法。
语法格式:ImageDraw.text((x,y), "text", font, fill)

  • (x,y):图像左上角为坐标原点,(x,y) 表示添加文本的起始坐标位置;
  • text:字符串格式,要添加的文本内容;
  • font:ImageFont 对象;
  • fill:文本填充颜色。
from PIL import Image, ImageDraw, ImageFont

# 打开图片,返回 Image对象
im = Image.open("./python.png")
# 创建画布对象
draw = ImageDraw.Draw(im)
# 加载计算机本地字体文件
font = ImageFont.truetype('C:\Windows\Fonts\simkai.ttf', size=36)
# 在原图像上添加文本
draw.text(xy=(80, 50), text='Python自学网', fill=(255, 0, 0), font=font)
im.show()
im.save("./c.png")

完整代码如下 -

from PIL import Image, ImageDraw, ImageFont

# 加载计算机本地字体文件
font = ImageFont.truetype('C:\Windows\Fonts\simkai.ttf', size=30)


def creating_watermark(im, text, font=font):
    # 给水印添加透明度,因此需要转换图片的格式
    im_rgba = im.convert('RGBA')
    im_text_canvas = Image.new('RGBA', im_rgba.size, (255, 255, 255, 0))
    print(im_rgba.size[0])
    draw = ImageDraw.Draw(im_text_canvas)
    # 设置文本文字大小
    text_x_width, text_y_height = draw.textsize(text, font=font)
    print(text_x_width, text_y_height)
    text_xy = (im_rgba.size[0] - text_x_width, im_rgba.size[1] - text_y_height)
    print(text_xy)
    # 设置文本颜色(绿色)和透明度(半透明)
    draw.text(text_xy, text, font=font, fill=(255, 255, 255, 128))
    # 将原图片与文字复合
    im_text = Image.alpha_composite(im_rgba, im_text_canvas)
    return im_text


image = Image.open("./python.png")
image_water = creating_watermark(image, 'python自学网')
image_water.show()
image_water.save("./python自学网.png")

你可能感兴趣的:(Python,#,Pillow库,python,pillow,开发语言)