版本:Python3
第三方库:pillow
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| import os from PIL import Image, ImageDraw, ImageFont
def addWatermark(path, new_path, file_name, text, fonts_path, fill_color): """ 1)打开图片 """ img = Image.open(path + '//' + file_name)
""" 2)获取文本及图片尺寸,计算比例因子,推算字体的大小尺寸 """ default_font_size = 10 text_width, text_height = ImageFont.truetype(fonts_path).getsize('ExcelPerfect') img_width, img_height = img.size scaler = img_width/8/text_width scale_text_font = int(default_font_size * scaler) scale_text_width = int(scaler * text_width) scale_text_height = int(scaler * text_height)
""" 3)加载默认下载的字体,并设置计算出的字体大小(Windows搜索栏搜索字体,点击字体详情,可以查看字体文件路径) """ font = ImageFont.truetype(fonts_path, size=scale_text_font) start_x = img_width - scale_text_width - 30 start_y = img_height - scale_text_height - 20
""" 4)在图片上创建一个画布,后续的添加水印就是在带有画布的图片上进行,需要注意的是, 这相当于在图片上贴了一层画布, 我们的内容是写在画布上, 然后内容会"渗"到图片上,所以我们最终要保存的是图片, 而不是画布 """ image_could_be_drawed = ImageDraw.Draw(img)
""" 5)将水印内容放在图片上,并保存图片到本地 """ image_could_be_drawed.text((start_x, start_y), text, font=font, fill=fill_color) if not os.path.exists(new_path): os.makedirs(new_path) img.save(new_path + '//' + file_name)
if __name__ == '__main__': ''' path:目录路径 new_path:添加水印之后文件的保存路径 text:水印内容 fonts_path:字体 fill_color:水印颜色 ''' path = 'C://data' new_path = path + '//new_file' text = '程序园@大Null' fonts_path = 'C://WINDOWS//FONTS//MSYH.TTC' fill_color = '#a9a9a9'
for file_name in os.listdir(path): addWatermark(path, new_path, file_name, text, fonts_path, fill_color)
|
参考文献
【1】https://mp.weixin.qq.com/s?__biz=MzA3NTMzMjMyOA==&mid=2650930516&idx=1&sn=dffa32f7c67b04cd62b1377a1e4b7883&chksm=848772d3b3f0fbc5b1abfa12830cc72d16b0d1d4f23bdb1b9840e2ad875042e95c8997dcab22&cur_album_id=2102551132639166464&scene=189#wechat_redirect
【2】https://blog.csdn.net/qq_41785288/article/details/128540158