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)
二、使用效果
先使用两张照片样例测试,图片缩略图和文件名如下:
我的python代码保存的文件名为setwater.py
,在图片所在的目录下执行setwater.py
,然后程序会在当前目录下创建一个名称为new
的文件夹,然后将加了文字的图片保存在new
文件夹中。
添加文字后图片预览效果如下:
再分别贴出处理前后的照片图片
处理前:
处理后:
PS:文字具体颜色和位置字体等可以根据开发文档自行调整。
除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址