Pillow介绍
PIL(Python Imaging Library)是Python图像处理标准库,但只支持Python2.7;Pillow是在其基础增加了兼容性和其他新特性,支持最新Pytho3.x。进行图像处理时,可以直接安装Pillow,就能使用PIL和Pillow中的API。
打水印方法
预期效果:
打水印前
打水印后
方法:
创建一个和底图相等大小的画布,透明度设置为0,在画布上添加水印的文字并调整好位置,叠加到底图上。
注意事项:
- 在批量添加水印的过程中,由于底图大小不一,所以水印文字的大小应该由底图大小来动态决定
- 由于水印的文字大小是动态的,水印位置如果设置成绝对位置,会出现吞字情况,所以水印的位置也应该设置成动态的。
示例代码
PIL.Image.new(mode,size,color): 创建新图像。mode:图像的模式(RGB/RGBA),size图像大小,color初始化图像底色。
PIL.Image.alpha_composite(img1,img2): 将img2复合到img1上,相当于图层叠加。img1必须是RGBA模式,img2也必须是RGBA模式且和img1相同大小。
PIL.ImageDraw.Draw(img): 创建对象绘制img,相当于栅格化。
PIL.ImageFont.truetype(font=None, size=10, index=0, encoding=’’, layout_engine=None): 创建字体对象。
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
| from PIL import Image,ImageFont,ImageDraw import os output_base_path = "" input_dir = "" content = "" font_type = ""
def add_watermark(file_path): img = Image.open(file_path).convert('RGBA') watermark = Image.new('RGBA',img.size,(0,0,0,0)) font_size = 0 if img.size[0]>img.size[1]: font_size = int(img.size[1]/100*3.5) else: font_size = int(img.size[0]/100*3.5) fnt = ImageFont.truetype(font_type,font_size) d = ImageDraw.Draw(watermark) d.text((watermark.size[0]-(len(content)+2)*font_size,watermark.size[1]-1.5*font_size),content,font =fnt,fill=(255,255,255,255)) out = Image.alpha_composite(img,watermark) file_name = os.path.basename(file_path).split('.')[0] out.save(os.path.join(output_base_path,file_name+".png"))
if __name__ =="__main__": for files in os.listdir(input_dir): add_watermark(os.path.join(input_dir,files)) print('finished')
|
参考文章