Python之利用PIL批量给图片添加文字
因为略懂Photoshop,所以接到一个任务:将公司所有的产品图片整理出来,并在图片中写明产品的品牌和型号,然后分类放在iPad中方便给客户展示。
WTF,几千张图片,用PS一个个打开添加文字,这会把人弄疯的,作为一个懒人,做这种大量机械性的重复工作显然不是我的追求,于是就想到用程序自动实现。
一、使用Python和PIL图片处理库
思路:所有图片的文件名都是以品牌+型号的方式命名,所以先用python读取当前目录下所有文件,得到文件名后我们就可以得到当前图片的品牌型号字符串,然后根据图片像素大小自动判断合适的字体大小,再利用PIL库给原图片加上文字水印(品牌型号),然后将处理后的图片保存在当前目录下的new
子文件夹。
#!/usr/bin/env python3 # -*- coding:utf-8 -*- import os import sys import PIL from PIL import Image from PIL import ImageDraw from PIL import ImageFont # 设置文字水印 def set_water_text(imagefile, text): img = Image.open(imagefile) (img_x, img_y) = img.size # 文字字体像素高度为图片高度的 1/20 ttfont = ImageFont.truetype('/usr/share/fonts/noto/NotoSansCJK-Regular.ttc', int(img_y/20)) draw = ImageDraw.Draw(img) draw.text((int(img_x/20), img_y - int((img_y*1.3)/20)), text, (0,0,0), font=ttfont) newdir = "new" if not os.path.exists(newdir): os.mkdir(newdir) img.save(newdir + '#' + text + '.jpg', 'jpeg') if __name__ == '__main__': files = os.listdir(os.getcwd()) for filename in files: if 'jpg' == filename.split('.')[-1].lower() or 'png' == filename.split('.')[-1].lower(): set_water_text(filename, filename.split('.')[0]) print(filename)