我们先准备一张PNG图片,在PS里调整下大小和透明度,使用下面脚本可以把PNG图叠加到一张JPG图上,然后保存图片查看水印是否合适。
# JPG叠加PNG透明图片
from PIL import Image, ImageDraw, ImageFont, ImageGrab
mark = Image.open("262235.png").convert('RGBA')
im = Image.open("th.jpg")
# 水印粘贴坐标: 左上角x,y,右下角x,y
box = ( im.width - mark.width, im.height - mark.height , im.width , im.height)
# 粘贴操作,可理解为往 box 中放东西
# 注意这里 paste 函数的第3个参数,是alpha通道
# 传入含有alphat通道的图片,会自动采用该图片的alpha通道
# 简单说,就是PNG透明会生效。具体看文档
im.paste(mark, box , mark )
im.save("test_web_high.jpg", quality="web_high")
# im.show()
怎么能批量处理很多图片文件能,就要用到 glob.glob
函数了
glob.glob
函数功能:匹配所有的符合条件的文件,并将其以list的形式返回
import sys, glob
files = []
for f in sys.argv[1:]:
files = files + glob.glob(f)
for f in files:
print("FontName: " + f)
测试命令输出效果
$ python3 test.py *.jpg E:/flashair_sRGB/*.jpg FontName:test_web_high.jpg FontName:th.jpg FontName:E:/flashair_sRGB\DSC_5007.JPG ... FontName:E:/flashair_sRGB\DSC_5214.JPG
把上面2个测试脚本组合到一起,批量添加水印的脚本就完成了
# JPG叠加PNG透明图片
from PIL import Image, ImageDraw, ImageFont, ImageGrab
import sys, glob
files = []
for f in sys.argv[1:]:
files = files + glob.glob(f)
# 脚本指定做水印的PNG图
mark = Image.open("262235.png").convert('RGBA')
for f in files:
im = Image.open(f)
# 水印粘贴坐标: 左上角x,y,右下角x,y
box = ( im.width - mark.width, im.height - mark.height , im.width , im.height)
# 注意这里 paste 函数的第3个参数,是alpha通道
im.paste(mark, box , mark )
im.save(f, quality="web_high")
print("FontName: " + f + " ....OK")
Python批量给图库添加水印-更新后能随机四角
# 详细说明网址 https://www.262235.xyz/index.php/archives/315/
# JPG叠加PNG透明图片
from PIL import Image, ImageDraw, ImageFont, ImageGrab
import sys, glob, random
def getbox(mark, im, n):
if n == 0: # 水印左上
box = (0, 0, mark.width, mark.height)
if n == 1: # 水印左下
box = (0, im.height - mark.height, mark.width, im.height)
if n == 2: # 水印右上
box = (im.width - mark.width, 0, im.width, mark.height)
if n == 3: # 水印右下
box = (im.width - mark.width, im.height - mark.height, im.width, im.height)
return box
files = []
for f in sys.argv[1:]:
files = files + glob.glob(f)
# 脚本指定做水印的PNG图
mark = Image.open("262235.png").convert('RGBA')
for f in files:
im = Image.open(f)
# 水印粘贴坐标: 左上角x,y,右下角x,y
box = getbox(mark , im , random.randint(0, 1000) % 4)
# 注意这里 paste 函数的第3个参数,是alpha通道
im.paste(mark, box, mark)
im.save(f, quality="web_high")
print("FontName: " + f + " ....OK")
对一张图片,多次随机加水印,能分布到四角
处理多个目录下的 JPEG 文件
先用
ls -1
得到目录表,然后加上/*.jpg \
,再按下面样式整理好python3 mark.py \ No.101/*.jpg \ No.102/*.jpg \ No.103/*.jpg \ No.104/*.jpg \ No.105/*.jpg \ No.106/*.jpg \ No.107/*.jpg \ No.108/*.jpg \ No.109/*.jpg \ No.110/*.jpg \ No.111/*.jpg \ No.112/*.jpg \ No.113/*.jpg \ No.114/*.jpg \ No.115/*.jpg \ No.116/*.jpg