当前位置 博文首页 > 拒绝盗图!教你怎么用python给图片加水印

    拒绝盗图!教你怎么用python给图片加水印

    作者:虾米小馄饨 时间:2021-08-10 18:47

    方式一:叠加文字水印

    最简单的一种方式是,在图片上绘制半透明文本来实现水印效果。

    图1 叠加文字水印

    主要用到Figure.text函数

    参数 类型 说明
    x, y float 叠加文本的位置坐标.,取值范围在 [0, 1]。
    s str 文本字符串。
    fontdict dict 可选 用于覆盖默认文本属性的字典。如果未给出,则默认值由 rcParams[“font.*”]确定。作为kwargs传递的属性,会覆盖fontdict 中给出的相应属性。

    叠加文字水印的代码如下

    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib qt5
    # 绘制图表内容
    fig, ax = plt.subplots()
    ax.plot(np.random.rand(10), '-o', ms=10, lw=2, alpha=0.7)
    ax.grid()
    
    # 叠加水印文字,对文字沿轴旋转30°,透明度50%
    ax.text(0.5, 0.5, 'created with https://blog.csdn.net/Bit_Coders/', transform=ax.transAxes,
            fontsize=20, color='gray', alpha=0.5,
            ha='center', va='center', rotation='30')
    
    plt.show()
    

    文本属性的相关参数详见:官方文档

    方式二:叠加图片水印

    图片水印可以叠加你设计好的logo、icon或者二维码图片。

    下面以二维码为例,在图表上叠加你的博客二维码水印:

    图2 叠加图片水印

    图片水印主要用到figimage函数

    参数 类型 说明
    X 图像数据 数组格式是以下三种之一, MxN:亮度(灰度)值,MxNx3:RGB 值,MxNx4:RGBA 值
    xo,yo int 以像素为单位的x/y图像偏移量
    alpha None or float 混合透明度
    cmap str or matplotlib.colors.Colormap 使用的颜色图,默认值: rcParams[“image.cmap”] (default: ‘viridis')
    resize bool 是否缩放figure来匹配给定的图片尺寸

    1、生成二维码图片:在命令行用myqr生成对应

    myqr https://blog.csdn.net/Bit_Coders

    生成的二维码图片会保存到当前路径。

    在这里插入图片描述

    2、叠加图片水印,代码如下

    import numpy as np
    from PIL import Image
    import matplotlib.image as image
    import matplotlib.pyplot as plt
    from matplotlib import cm
    
    # 加载水印图片,并缩放到合适大小
    resize_w = 100
    img = Image.open('J:\Projects\PythonScripts\qrcode.png')
    img = img.resize((resize_w,resize_w))
    
    fig, ax = plt.subplots()
    
    # 绘制图表内容
    ax.plot(np.random.rand(10), '-o', ms=10, lw=2, alpha=0.7)
    ax.grid()
    
    # 确定叠加位置
    nx = int(fig.get_figwidth() * fig.dpi)
    ny = int(fig.get_figheight() * fig.dpi)
    pos_x = nx - resize_w 
    pos_y = 10
    
    # 叠加图片水印
    fig.figimage(img, pos_x,pos_y, alpha=.5)
    
    plt.show()
    
    jsjbwy