Python加水印
时间:2022-07-23
本文章向大家介绍Python加水印,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
因为写在博客上的文章(部分)会给盗取,所以老早之前就写了一个加水印的程序
后来发现,因为防止文件名重复,我都是用一种随机的方式生成的文件名
filename=sys.argv[i]
suffix=filename[-3:]
temp_name=d.datetime.now().strftime("%M-%S")+"."+str(suffix)
但是这样一来就会打乱文件顺序(因为我命名都是1 2 3 4这样),不好管理,所以就稍微修改了一下,发出来图一乐
先导入库
import os
import sys
import time
import datetime as d
from PIL import Image, ImageDraw, ImageFont
因为一次性需要多个图片的问题,所以最开始写的时候想的是,文件拖过去就能执行了;获取文件名的方式就变成了
...
for i in range(1,100):
filename=sys.argv[i]
就一直循环,看有没有参数
接着设置水印内容
...
text = "@blog.ernket.top"
下面就是加水印的操作了(水印固定右下角)
...
image = Image.open(filename)
font = ImageFont.truetype('C:\Windows\Fonts\微软雅黑\msyh.ttc',18)
layer = image.convert('RGBA')
text_overlay = Image.new('RGBA', layer.size)
image_draw = ImageDraw.Draw(text_overlay)
text_size_x, test_size_y = image_draw.textsize(text,font=font)
text_xy = (layer.size[0] - text_size_x, layer.size[1] - test_size_y)
image_draw.text(text_xy,text,font=font,fill='#000000') #字体颜色
after = Image.alpha_composite(layer,text_overlay)
temp_name=d.datetime.now().strftime("%M-%S")+"."+str(suffix)
after.save(temp_name)
文件水印加完了,现在考虑的是文件名的问题,我的做法是删除源文件防止报 文件已存在
的错误,然后在重命名 (也许可以直接覆盖吧,懒得写
...
os.remove(filename)
os.rename(temp_name,filename)
print("[+] "+filename+" 已完成水印工作,正在替换文件名.... "+str(temp_name+" --> "+filename))
time.sleep(1)
到这就写完了,当然for循环的时候会报错,因为给的参数不同,加个 try
就好了
import os
import sys
import time
import datetime as d
from PIL import Image, ImageDraw, ImageFont
print("Auther:Elapse")
for i in range(1,100):
try:
filename=sys.argv[i]
suffix=filename[-3:]
image = Image.open(filename)
text = "@blog.ernket.top"
font = ImageFont.truetype('C:\Windows\Fonts\微软雅黑\msyh.ttc',18)
layer = image.convert('RGBA')
text_overlay = Image.new('RGBA', layer.size)
image_draw = ImageDraw.Draw(text_overlay)
text_size_x, test_size_y = image_draw.textsize(text,font=font)
text_xy = (layer.size[0] - text_size_x, layer.size[1] - test_size_y)
image_draw.text(text_xy,text,font=font,fill='#000000')
after = Image.alpha_composite(layer,text_overlay)
temp_name=d.datetime.now().strftime("%M-%S")+"."+str(suffix)
after.save(temp_name)
os.remove(filename)
os.rename(temp_name,filename)
print("[+] "+filename+" 已完成水印工作,正在替换文件名.... "+str(temp_name+" --> "+filename))
time.sleep(1)
except:
break
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CS学习笔记 | 24、C2lints实例演示
- CS学习笔记 | 23、malleable命令
- ASP.NET Core 基于声明的访问控制到底是什么鬼?
- scATAC-seq建库原理,质控方法和新R包Signac的使用
- R语言可视化学习笔记之ggridges包绘制山峦图
- 06 . ELK Stack + kafka集群
- 使用DockerFile构建运行GoWeb
- windows版gbc:基于enginx的组件服务器系统paas,可用于mixed web与websocket game
- 01 . RPC简介原理及用Go实现一个RPC
- 17 . Go之网络编程
- 01 . Go框架之Beego简介部署及程序流程分析
- 服务器入侵排查流程
- Nginx配置各种响应头防止XSS,点击劫持,frame恶意攻击
- Redis一站式管理平台工具,支持集群创建,管理,监控,报警
- Go操作Redis