玩命加载中...
# 利用python对图像加水印 有时候我们需要对自己的摄影作品或者制作的图像加上水印,大部分修图软件都可以做到水印功能,可是如何做到批量加水印呢?Python就可以做到。 本教程中,我们将学习如何利用python中的matplotlib模块读取图像、对图像添加水印以及存储图像。 以下代码中,我们将使用`matplotlib`,`skimage`以及`numpy`。 预计学习用时:20分钟。 本教程基于**Python 3.6**。 原创者:**SofaSofa TeamM** | 修改校对:SofaSofa TeamC | ---- ### 0. 素材下载 我们使用了国内三个城市的风景照作为图像素材(下载[上海](http://sofasofa.io/tutorials/matplotlib_watermark/shanghai.jpg)、[深圳](http://sofasofa.io/tutorials/matplotlib_watermark/shenzhen.jpg)、[台北](http://sofasofa.io/tutorials/matplotlib_watermark/taibei.jpg))以及绿色沙发([下载](http://sofasofa.io/tutorials/matplotlib_watermark/sofasofa.png))作为水印素材。 ### 1. 文字类型水印 我们很容易利用matplotlib中pyplot.text函数实现文字类型的水印。实现的代码如下: ```python 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 ``` 批量添加水印。 ```python for img in ['shanghai.jpg', 'shenzhen.jpg' ,'taibei.jpg']: TextWatermark(img_src=img, dest='wm_%s'%img, text='SofaSofa.io', loc=[30, 50]); ``` ![png](output_3_0.png) ![png](output_3_1.png) ![png](output_3_2.png) ### 2. 图像类型水印 考虑到水印本身的透明度,我们最好使用png类型的图像作为水印。此外,考虑到水印本身的大小,我们可以用`skimage.transform`中的`resize`函数修改水印的大小。 ```python 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 ``` 批量添加水印。 ```python for img in ['shanghai.jpg', 'shenzhen.jpg' ,'taibei.jpg']: ImgWatermark(img_src=img, dest='iwm_%s'%img, wm_src='sofasofa.png', loc=[40, 200]); ``` ![png](output_7_0.png) ![png](output_7_1.png) ![png](output_7_2.png) <ul class="pager"> <li class="next"><a href="../../tutorials.php"><b><i class="fa fa-graduation-cap" aria-hidden="true"></i>&nbsp; 学完咯!</b></a></li> </ul>