GUI编程:图片批量加水印,附打包exe教程带图标(干货巨多,建藏!)

举报
Python新视野 发表于 2021/10/31 18:58:48 2021/10/31
【摘要】 写在前面 实现图片添加水印 实现 GUI(图形用户界面) Pyinstaller 打包效果图 写在前面对于自己辛苦创作原创文章,相信大家都不愿意自己的文章被别人随便爬取。对于文章中的图片,可以通过添加水印的方式来防止侵权问题,读完本文你将学会 制作自己专属的水印、批量化的添加水印、实现可视化界面、通过将文件打包,可以将该功能分享给其他没有 Python 环境的人来运行,社交撩妹必备。话不多...

效果图请添加图片描述

写在前面

对于自己辛苦创作原创文章,相信大家都不愿意自己的文章被别人随便爬取。对于文章中的图片,可以通过添加水印的方式来防止侵权问题,读完本文你将学会 制作自己专属的水印批量化的添加水印实现可视化界面、通过将文件打包,可以将该功能分享给其他没有 Python 环境的人来运行,社交撩妹必备。话不多说,进入正题!

在这里插入图片描述

主要用到的库:

cv2OpenCV 是一个基于 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() 函数,遍历指定文件夹下的文件,获取图片格式为 pngjpg 的文件路径,然后遍历图片进行添加水印。

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)  # 添加水印

这样通过上面两个函数,就可是实现图片批量添加的功能。


实现 GUI(图形用户界面)

考虑到要打包成 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 打包

如果没有安装 pyinstaller 的,可以先安装一下。

pip install -i https://pypi.douban.com/simple pyinstaller 

安装后可以使用 pip show pyinstaller 来检测是否安装成功。

如果确保安装成功,那么接下来就是关键了。

新建一个文件夹,将 .py 文件放入文件夹中。
请添加图片描述

打开 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 图标。


这就是本文所有的内容了,如果感觉还不错的话。❤ 点个赞再走吧!!!❤

在这里插入图片描述
后续会继续分享各种有趣的文章,如果感兴趣的话可以点个关注不迷路哦~。


源码可以通过可以通微信搜 Python新视野,回复“水印源码”直接获取。对于刚入门 Python 或是想要入门 Python 的小伙伴,也可以通过上述方式一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。