三种Python批量添加随机水印的方法分享
1. 使用PIL库:首先安装PIL库,然后打开图片,创建一个新的透明图层,将随机生成的水印文字添加到新图层上,最后将新图层与原图合并。 2. 使用opencv库:读取图片,生成随机水印文字,将其转换为图像,然后将水印图像叠加到原图上。 3. 使用matplotlib库:读取图片,生成随机水印文字,将其绘制在图片上。这种方法适用于简单的水印需求,但可能会影响图片质量。
方法一
提前安装第三方库,安装PIL库(Pillow):在命令行中输入pip install pillow进行安装;
将此py文件放入根目录,另外根目录中有三个文件夹,watermark(水印文件夹)、original(需加水印图片的文件夹)、output(成品文件夹)
fromPILimportImage,ImageDrawimportos,randomwater_path='./watermark'#水印文件夹路径watermark_list=os.listdir(water_path)defdo(file_name):#打开原始图片和水印图片original_image=Image.open(file_name)random_mark=random.choice(watermark_list)#选择随机水印图片#print(random_mark)watermark_image=Image.open(f'{water_path}/{random_mark}')#将水印图片缩放到合适的大小watermark_width,watermark_height=watermark_image.sizebase_width,base_height=original_image.sizewatermark_image=watermark_image.resize((base_width,int(base_width/watermark_width*watermark_height)))#创建一个和原始图片相同大小的空白画布canvas=Image.new('RGBA',original_image.size)#将原始图片粘贴到画布上canvas.paste(original_image,(0,0))#将水印图片粘贴到画布上canvas.paste(watermark_image,(0,0))#保存带有水印的图片name=file_name.split("\\")[-1]canvas.save(f'./output/do_{name}')#成品保存路径print(f">>>>{name}添加{random_mark}水印成功。")forroot,dirs,filesinos.walk("./original"):#需要加水印的文件夹路径fornameinfiles:file_name=os.path.join(root,name)do(file_name)
方法二
fromPILimportImage,ImageDraw,ImageFontdefadd_watermark(input_image_path,output_image_path,watermark_text):#打开原始图片base_image=Image.open(input_image_path).convert("RGBA")#创建一个可以在给定图像上绘图的对象draw=ImageDraw.Draw(base_image)#设置字体和大小font=ImageFont.truetype("arial.ttf",15)#水印文字的字体,大小,这是英文字体不支持中文,换成自己的字体即可#在图片上添加水印,设置水印位置和颜色等draw.text((20,20),watermark_text,fill=color,font=font)#保存带有水印的图片base_image.save(output_image_path)#使用示例add_watermark("../img-test/orig.jpg",#需加水印的图片"../img-test/orig--out.png",#最终的图片"WatermarkText")#水印文字
方法三
fromPILimportImage#打开背景图片和水印图片background=Image.open('../img-test/orig.jpg')#需加水印的图片watermark=Image.open('../img-test/mark.png').convert("RGBA")#透明背景的水印图片#将水印图片粘贴到背景图片上background.paste(watermark,(0,0),mask=watermark)#水印位置(0,0)#保存合并后的图片background.save('../img-test/orig_mark.png')