利用python对图像加水印

有时候我们需要对自己的摄影作品或者制作的图像加上水印,大部分修图软件都可以做到水印功能,可是如何做到批量加水印呢?Python就可以做到。

本教程中,我们将学习如何利用python中的matplotlib模块读取图像、对图像添加水印以及存储图像。

以下代码中,我们将使用matplotlibskimage以及numpy

预计学习用时:20分钟。 

 本教程基于Python 3.6。  

原创者:SofaSofa TeamM | 修改校对:SofaSofa TeamC |

1. 文字类型水印

我们很容易利用matplotlib中pyplot.text函数实现文字类型的水印。实现的代码如下:

import matplotlib.pyplot as plt

def textWatermark(img_src, dest, text, loc, fontsize=20, alpha=0.5):
    fig = plt.figure()
    # 读取图像
    plt.imshow(plt.imread(img_src))
    # 添加文字水印
    plt.text(loc[0], loc[1], text, fontsize=fontsize, alpha=alpha, color='gray')
    # 隐藏坐标轴
    plt.axis('off')
    # 保存图像
    plt.savefig(dest, dpi=fig.dpi, bbox_inches='tight')
    return fig

批量添加水印。

for img in ['shanghai.jpg', 'shenzhen.jpg' ,'taibei.jpg']:
    textWatermark(img_src=img, dest='wm_%s'%img, text='ikeguang.com', loc=[30, 50]);

可能需要Pillow这个包

pip3 install Pillow

否则,会报错:

ValueError: Only know how to handle extensions: ['png']; 	
with Pillow installed matplotlib can handle more images

红色字体意思很明显,安装Pillow包matplotlib可以支持更多图片。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

2. 图像类型水印

考虑到水印本身的透明度,我们最好使用png类型的图像作为水印。此外,考虑到水印本身的大小,我们可以用skimage.transform中的resize函数修改水印的大小。

import matplotlib.pyplot as plt
from skimage.transform import resize
import numpy as np

def imgWatermark(img_src, dest, wm_src, loc, scale=5, alpha=0.5):
    fig = plt.figure()
    # 读取水印
    watermark = plt.imread(wm_src)
    # 调整水印大小
    new_size = [int(watermark.shape[0]/scale), int(watermark.shape[1]/scale), watermark.shape[2]]
    watermark = resize(watermark, new_size, mode='constant')
    # 调整水印透明度
    watermark[:, :, -1] *= alpha
    # 读取图像
    plt.imshow(plt.imread(img_src))
    # 添加水印
    plt.figimage(watermark, loc[0], loc[1], zorder=10)
    # 隐藏坐标轴
    plt.axis('off')
    # 保存图像
    plt.savefig(dest, dpi=fig.dpi, bbox_inches='tight')
    return fig

批量添加水印。

for img in ['shanghai.jpg', 'shenzhen.jpg' ,'taibei.jpg']:
    imgWatermark(img_src=img, dest='iwm_%s'%img, wm_src='sofasofa.png', loc=[40, 200]);

虽然,这里没有显式导入scipy这个包,不过加图片类型水印,是需要这个包支持的:

pip3 install scipy

否则,报错信息:

ModuleNotFoundError: No module named 'scipy'

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

3. 素材地址

图片下载地址:

http://www.ikeguang.com/image/provide/shanghai.jpg

http://www.ikeguang.com/image/provide/shenzhen.jpg

http://www.ikeguang.com/image/provide/taibei.jpg

http://www.ikeguang.com/image/provide/sofasofa.png

猜你可能喜欢

640?wx_fmt=jpeg

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值