有时候我们需要对自己的摄影作品或者制作的图像加上水印,大部分修图软件都可以做到水印功能,可是如何做到批量加水印呢?Python就可以做到。
本教程中,我们将学习如何利用python中的matplotlib模块读取图像、对图像添加水印以及存储图像。
以下代码中,我们将使用matplotlib
,skimage
以及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可以支持更多图片。
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'
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
猜你可能喜欢