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

Posted Dream丶Killer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⭐️GUI编程:图片批量加水印,附打包exe教程带图标(干货巨多,建藏!)⭐️相关的知识,希望对你有一定的参考价值。

效果图

写在前面

对于自己辛苦创作原创文章,相信大家都不愿意自己的文章被别人随便爬取。对于文章中的图片,可以通过添加水印的方式来防止侵权问题,读完本文你将学会 制作自己专属的水印批量化的添加水印实现可视化界面、通过将文件打包,可以将该功能分享给其他没有 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 图标。

最后文章中的源码及打包后的文件已经放到链接下,需要的可以自己下载。粉丝可以直接评论回复邮箱直接发送到位哦~
代码获取:https://download.csdn.net/download/qq_43965708/21399637


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


后续会继续分享各种有趣的文章,如果感兴趣的话可以点个关注不迷路哦~。

以上是关于⭐️GUI编程:图片批量加水印,附打包exe教程带图标(干货巨多,建藏!)⭐️的主要内容,如果未能解决你的问题,请参考以下文章

不会吧,不会吧,不会还有人不知道❤️Python给图片加水印❤️超级简单哦

用ps cs5做好的水印,添加到图片上的时候为啥会这么大,请详细解答!

ps技术--批量给图片加水印

《VUE》怎么添加水印?添加水印方法图解

Python 给图片加文字或logo水印(附代码) | Python工具

怎样用PS制作水印效果和去除的方法?