效果图
对于自己辛苦创作原创文章,相信大家都不愿意自己的文章被别人随便爬取。对于文章中的图片,可以通过添加水印的方式来防止侵权问题,读完本文你将学会 制作自己专属的水印、批量化的添加水印、实现可视化界面、通过将文件打包,可以将该功能分享给其他没有 Python
环境的人来运行,社交撩妹必备。话不多说,进入正题!
主要用到的库:
cv2:OpenCV
是一个基于 BSD
许可(开源)发行的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。
PIL:第三方图像处理库,十分强大,由于使用人数庞大再加上确实牛,几乎已经被认为是 Python
官方图像处理库。
tkinter:实现 GUI
编程(文本框、按钮、标签等组件实现 GUI
开发)。
Pyinstaller:是一个非常简单的打包 .py
文件的库。
add_mark()
函数,实现对指定路径下的图片添加水印。
def add_mark(read_path, save_path):
'''
在读取的图片上添加水印
:param read_path: 原图片路径
:param save_path: 保存文件的路径
:return: 无
'''
img = Image.open(read_path)
'''个性设置'''
text = "CSDN Dream丶Killer"
font_size = 35 # 文字大小
font_color = (205, 201, 201, 150) # 文字颜色最后一位 150 是透明度
alpha = 30 # 文字离边界的距离
font_path = r'C:\Windows\Fonts\HGHP_CNKI.TTF'
height, width = img.size
font = ImageFont.truetype(font_path, font_size)
im = img.convert('RGBA') # 实例图形对象,并指定色彩模式
mark = Image.new('RGBA', (height, width), ((0, 0, 0, 0)))
draw = ImageDraw.Draw(mark)
text_h, text_w = draw.textsize(text, font=font)
position = (height - text_h - alpha, width - text_w - alpha) # position 即为字体左上角的坐标,当前水印位置:右下
# position = (0 + alpha, 0 + alpha) # 左上
# position = (height - text_h - alpha, 0 + alpha) # 右上
# position = (0 + alpha, w - text_w - alpha) # 左下
draw.text(position, text, font=font, fill=font_color)
# 只能保存为png格式
Image.alpha_composite(im, mark).save(save_path)
get_path()
函数,遍历指定文件夹下的文件,获取图片格式为 png
,jpg
的文件路径,然后遍历图片进行添加水印。
def get_path():
dir_path = r'C:\Users\pc\Desktop\test' # 保存图片的文件夹
path_list = list(Path(dir_path).glob('*.png')) + list(Path(dir_path).glob('*.jpg'))
if path_list == 0:
return '文件夹下无图片'
for path in path_list:
save_path = Path(path.parent, path.name.split('.')[0] + '(加水印).png')
add_mark(path, save_path) # 添加水印
这样通过上面两个函数,就可是实现图片批量添加的功能。
考虑到要打包成 exe
,没有个界面怎么能行哈!所以可以用 tkinter
实现 GUI
,先看一下生成的界面。
主要组件就是三个 Entery
,两个分别用来输入水印和字体路径,第三个用来显示路径选择后的结果;两个按钮,一个用来选择路径,一个用来按钮,跳转到添加水印的函数;最后一个文本框,用来显示执行的结果信息,以及报错内容。
值得一说的是,上面的界面是设置过 tkinter
样式的,如果未修改样式的话,界面如下:
差别还是比较明显的,修改 tkinter
主题样式的方法如下:
from tkinter.ttk import *
实际就是导入 tkinter
库中的 ttk
下的所有组件,来覆盖 tkinter
库中原本的组件,但覆盖后的组件参数并不完全一样,比如创建一个带背景颜色的标签,两种样式的创建方法如下:
# tkinter
tkinter.Label(text="sun", fg="black", bg="white")
# tkinter.ttk
style = ttk.Style()
style.configure("label", foreground="black", background="white")
ttk.Label(text="Test", style="label")
如果没有安装 pyinstaller
的,可以先安装一下。
pip install -i https://pypi.douban.com/simple pyinstaller
安装后可以使用 pip show pyinstaller
来检测是否安装成功。
如果确保安装成功,那么接下来就是关键了。
打开 cmd
进入当前目录下。
pyinstaller
使用时的常用参数含义:
-F:打包单个文件,产生一个文件用于部署(默认),如果代码都写在一个
.py
文件时使用,项目有多个文件时不要使用pyinstaller -F xxx.py
-D:打包多个文件,产生一个目录用于部署(默认),用于框架编写的代码打包
pyinstaller -D xxx.py(项目入口文件)
–key=keys:使用
keys
进行加密打包pyinstaller --key=123456 -F xxx.py
-d:产生
debug
版本的可执行文件-p:用来添加程序所用到的包的所在位置,设置导入路径,可以用
;
( Linux 使用:
)分割来指定多个目录。-w:表示不用控制台窗口,使用 Windows 子系统执行,当程序启动的时候不会打开命令行(只对 Windows 有效)
-c:表示打开控制台窗口,使用控制台子系统执行,当程序启动的时候会打开命令行(默认)(只对 Windows 有效)
-i:将 file.ico 添加为可执行文件的资源,改变程序的图标(只对 Windows 系统有效)
exe
文件在 dist
文件夹下面。到这里就可以把 .exe
文件发送给小伙伴,他就可以在没有任何配置的情况下运行哦~(前提是同样是 Windows
下哦)
这里的图标是我自己在网上找的。
如果没有 ico
格式的图标的话,
推荐一个免费的 icon
网站:https://iconstore.co/
然后在 https://www.aconvert.com/cn/icon/svg-to-ico/ 转换成指定大小的 ico
图标。
最后文章中的源码及打包后的文件已经放到链接下,需要的可以自己下载。粉丝可以直接私信领取哦~
代码获取:https://download.csdn.net/download/qq_43965708/21399637
这就是本文所有的内容了,如果感觉还不错的话。❤ 点个赞再走吧!!!❤
后续会继续分享各种有趣的文章,如果感兴趣的话可以点个关注不迷路哦~。
像我这么宠粉的人~当然会给关注我的粉丝们亿点小福利啦,关注下方小卡片,回复 “水印源码” 即可获取源码哦!,另外还有博主各种文章源码及干货资料!