Python图片添加图片水印的原理及添加程序开发方法介绍
优采云 发布时间: 2021-08-11 01:24Python图片添加图片水印的原理及添加程序开发方法介绍
文章directory
一、为什么要给图片加水印
在网上写文章时最大的头痛之一就是文章发表的很容易抄袭,各种抄袭的方法真是层出不穷。只好在不影响阅读体验的情况下,不断提高反抄袭难度。虽然无法避免,但在文章中的图片上加水印,至少可以保证文章被抄袭后,读者仍然会知道文章网站的来源。
在某些情况下,我们可以使用FastStone等一些软件来快速捕捉带有水印的图片,如下图:
此类工具可以快速为图片添加水印图像。
但是如果我们有一批图片,它们不是由截图生成的。这种情况下,如果要给每张图片加水印,FastStone工具就有点力不从心了。
我们可以使用市场上的一些软件来实现:
但这些软件要么不免费,要么免费但不安全,要么太麻烦。
简单来说,我们将使用Python来完成一个批量添加图像水印的程序的开发。
二、使用Python给图片添加水印
给图片添加图片水印的原理其实很简单。只需在空白画布上依次添加原创图像和水印即可。
在 Python 中,我们可以借助 PIL 模块轻松添加图片水印。
接下来,我们通过代码来演示。
遍历文件夹内所有图片文件
首先我们需要获取目录中的所有文件并提取其中的图像文件。这一步可以通过内置的 os 模块来实现。代码如下:
import os
img_suffix_list = ['png', 'jpg', 'bmp']
for i in os.listdir(r"C:\Users\yang9\Desktop"):
if i.split('.')[-1] in img_suffix_list:
print(i)
运行上面的代码,我们会得到选中目录下后缀为png、jpg、bmp的图形文件,效果如下图:
给图片添加图片水印
在接下来的步骤中,我们为图片添加图片水印。这一步需要借助PIL的Image类来实现。
首先读取原图和水印图,得到原图的大小,代码如下:
img = Image.open(img_file) # 打开图片
watermark = Image.open(wm_file) # 打开水印
img_size = img.size
然后我们新建一个和原图一样大小的图层,并将水印图添加到图层中:
wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角
layer = Image.new('RGBA', img.size) # 新建一个图层
layer.paste(watermark, wm_position) # 将水印图片添加到图层上
接下来,我们合成图层和原创图像:
mark_img = Image.composite(layer, img, layer)
最后调用save方法将新图片保存到本地:
mark_img.save(save_path + new_file_name)
这样就生成了一张带水印的图片。
我们集成了两个函数,方便调用,代码如下:
# coding:utf-8
# @文件: code_run.py
# @创建者:州的先生
# 博客地址:zmister.com
import os,traceback
from PIL import Image
# 获取文件夹图片
def get_folder(fpath,wm_file,save_path):
try:
img_suffix_list = ['png', 'jpg', 'bmp']
for i in os.listdir(fpath):
if i.split('.')[-1] in img_suffix_list:
img_path = fpath + '/' + i
img_water_mark(img_file=img_path,wm_file=wm_file,save_path=save_path)
except Exception as e:
print(traceback.print_exc())
# 图片添加水印
def img_water_mark(img_file, wm_file,save_path):
try:
img = Image.open(img_file) # 打开图片
watermark = Image.open(wm_file) # 打开水印
img_size = img.size
wm_size = watermark.size
# 如果图片大小小于水印大小
if img_size[0] < wm_size[0]:
watermark.resize(tuple(map(lambda x: int(x * 0.5), watermark.size)))
print('图片大小:', img_size)
wm_position = (img_size[0]-wm_size[0],img_size[1]-wm_size[1]) # 默认设定水印位置为右下角
layer = Image.new('RGBA', img.size) # 新建一个图层
layer.paste(watermark, wm_position) # 将水印图片添加到图层上
mark_img = Image.composite(layer, img, layer)
new_file_name = '/new_'+img_file.split('/')[-1]
mark_img.save(save_path + new_file_name)
except Exception as e:
print(traceback.print_exc())
这样我们就用一个函数get_folder()来指定图片的目录,水印图片的位置,以及新图片的保存位置。运行代码,效果如下图所示:
进入保存目录查看具体效果。图片水印添加准确:
三、使用QT for Python制作图片水印添加程序
代码写好后,我们就可以方便的使用它批量添加图片水印了。虽然很方便,但如果我们能有一个带有图形用户界面的客户端程序供我们使用就更好了。
下一篇文章我们将介绍使用Python的PyQt5/PySide2将批量添加图片水印的功能打包成桌面客户端程序。效果如下图所示:
文章版权:周老师博客,转载需保留出处和原链接