戊辰人博客

青,取之于蓝而青于蓝;冰,水为之而寒于水。

Python之利用PIL批量给图片添加文字

日期:2017年4月11日 作者: 分类:编程 阅读:494

因为略懂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之利用PIL批量给图片添加文字

我的python代码保存的文件名为setwater.py,在图片所在的目录下执行setwater.py,然后程序会在当前目录下创建一个名称为new的文件夹,然后将加了文字的图片保存在new文件夹中。

添加文字后图片预览效果如下:

Python之利用PIL批量给图片添加文字

再分别贴出处理前后的照片图片

处理前:

刘禹彤

处理后:

刘禹彤

PS:文字具体颜色和位置字体等可以根据开发文档自行调整。

标签:,

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/1273.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注