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)

