python图片水印软件_使用Python编写批量添加图片水印程序:一、代码方案
一、为什么要为图片添加水印
在互联网写文章最头疼的一件事情就是发表的文章容易被抄袭,各种抄袭的手段真的是层出不穷。无奈,只能在不影响阅读体验的情况下不断地提高反抄袭的难度。虽然防不住,但是为文章中的图片添加水印,至少能够保证文章被抄袭之后,读者还能知道文章的来源网站。
在部分情况下,我们可以利用一些软件比如FastStone,快速截取一个带有水印的图片,如下图所示:
这样的工具可以快速地为图片添加上水印图像。
但是如果我们有一批的图片,其并不是通过截图生成,这种情况下如果要对每一个图片添加水印,FastStone工具就有点无能为力了。
我们可以使用市面上的一些软件来实现:
但是这些软件,要么不免费,要么免费但是不安全,要么太繁琐。
索性,我们就用Python来完成一个图片水印批量添加程序的开发。
二、利用Python为图片添加水印
图片添加图片水印的原理其实很简单,在一个空白的画布上依次将原图像和水印添加添加进去即可。
在Python中,我们可以借助PIL模块轻松地实现图片水印的添加。
下面,我们通过代码来演示一下。
遍历文件夹下所有图片文件
首先我们需要获取一个目录下的所有文件,提取出其中的图像文件,这一步通过内置的os模块即可实现,代码如下所示:
import os
img_suffix_list = ['png', 'jpg', 'bmp']
for i in os.listdir(r'C:Usersyang9Desktop'):
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,将批量添加图片水印的功能封装成一个桌面客户端程序。其效果如下动图所示:
著作权归作者所有
python图片水印软件_使用Python编写批量添加图片水印程序:一、代码方案相关推荐
- python给图片添加水印图片_使用Python编写批量添加图片水印程序
文章目录 一.为什么要为图片添加水印 二.利用Python为图片添加水印 遍历文件夹下所有图片文件 三.利用QT for Python制作图片水印添加程序 一.为什么要为图片添加水印 在互联网写文章最 ...
- python图片水印软件_基于Python制作的控制鼠标删除图片水印的小工具
在做视频或者图片处理的时候,我们经常会遇到存在水印的情况,或者我们需要去除图片的某一个部分, 这时候我们就需要想办法去除不需要的这一部分.下面这个工具能够控制鼠标将图片上的任意部分改变颜色, 从而达到 ...
- python邮件图片加密软件_用Python发一封图文并茂的邮件
最近使用了不少通讯工具的接口, 比如企业微信机器人,钉钉,微信公众号的接口(未认证的订阅公众号),相对于邮件来说,它们的表现形式太弱.比如没有更丰富的版本方式.当然了,并不是说表现形式越棒就是约好的通 ...
- python开发笔记软件_图解Python编程神器Jupyter Notebook
大家好!在本门课程中我会给大家详细讲解鼎鼎大名的Python编程神器Jupyter Notebook.Jupyter Notebook看似简单,实际上功能非常强大,而且有很多实用的小技巧.遗憾的是,目 ...
- python实现数据恢复软件_恢复python
centos 7 python2.7.5升级到3.5.2 centos 7 python2.7.5升级到3.5.2 下载python3.5.2 wget https://www.python.org/ ...
- python 爬取软件_用Python爬取了三大相亲软件评论区,结果...
小三:怎么了小二?一副愁眉苦脸的样子. 小二:唉!这不是快过年了吗,家里又催相亲了 ... 小三:现在不是流行网恋吗,你可以试试相亲软件呀. 小二:这玩意靠谱吗? 小三:我也没用过,你自己看看软件评论 ...
- python 工资管理软件_基于[Python]的员工管理系统
基于[Python]的员工管理系统 -------------------------------- 简介 使用python语言来完成一个员工管理系统,员工信息包含:员工工号,姓名, 年龄,性别,职位 ...
- python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)
抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...
- python识别文字软件_【Python 教程】使用 Python 和大漠插件进行文字识别
家里有一台win7系统的电脑,平时可以用来玩玩游戏消磨时间.但是有时候有一些重复的操作实在是无趣,所以打算写个脚本,让其自动化执行. 最终的目标就是把游戏里一些常用的操作都集合到脚本中去,且无序随机执 ...
最新文章
- 简单DP【p2642】双子序列最大和
- php怎么批量转码,网站文件批量转码_PHP教程
- ant自动打包多个android项目为apk
- pandas整表写入excel指定位置_当Python遇到Excel,一个能打的都没有~
- java8 入门脚本之家_Java 8中的Lambda表达式
- DL中常用的numpy
- mysql too many openfiles解决
- Cisco访问控制列表
- 修改Jupyter Notebook的默认路径
- python scrapy 爬取steam游戏
- 关于ansys19.0安装问题
- 华为鸿蒙手机用大卡还是小卡,【荣耀3XPro评测】大卡+小卡双3G网络-中关村在线...
- opencv-6-图像绘制与line 函数剖析
- android 程序崩溃处理,Android应用崩溃的应急处理
- 现在快手流量怎么样?如何增加流量?
- 获取新榜微信公众号指数信息,并服务器上部署
- 四级资料免费分享 【写作万能模板 + 听力高频词 + 核心500词 + 翻译必备句型 + 作文对策】 点个关注即可全部拿走!!!
- uwsgi多线程阻塞的问题导致接口一会儿正常一会报服务器错误
- 基于STM32的数模转换芯片AD5328驱动程序
- 研究生周报(第十四周)