Python中用PIL库批量给图片加上序号的教程


Posted in Python onMay 06, 2015

女友让我给她论文的图片上加上字母序号,本来觉得是个很简单的事情,但那个白底黑字的圆圈序号却难住了我, 试了几个常用的软件,都不行。

后来用 PS + 动作,倒是能搞出来,不过也不容易,正好那天没搞完,于是拿回自己家做,但我的电脑上又没有 PS, 所以就用 python 实现了。

效果图

Python中用PIL库批量给图片加上序号的教程

这里用的图片全是 240X240 的,按文件名的首字母作为序号,PIL 虽然可以计算文字的尺寸,但类似 D 这样的字符依然不能处于圆圈的正中,所以还对个别字符做了偏移设置,本来想用 aggdraw 画圆圈的,能平滑 一些,不过安装了好几次,都以失败告终,最终放弃。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os, sys, fnmatch
import Image, ImageDraw, ImageFont

def process_picture(filename):
  seq = os.path.split(filename)[-1][0].upper()
  img = Image.open(os.path.join(input_dir, filename))

  draw = ImageDraw.Draw(img)

  # 在右下角画白底黑框圆圈
  draw.ellipse((215, 215, 235, 235), outline='black', fill='white')

  # 将字母序号写入到圆圈内
  font = ImageFont.truetype('fonts/Times New Roman.ttf', 20)

  # 计算文字居中的位置
  text_size = draw.textsize(seq, font)
  x = (20 / 2) - (text_size[0] / 2)
  y = (20 / 2) - (text_size[1] / 2)

  # 字母偏移量
  offsets = {'A': 1, 'B': 1, 'E': 1, 'D': 2}
  offset = offsets.get(seq, 0)
  draw.text((215 + x + offset, 215 + y), seq, font=font, fill='black')

  # save image
  img.save(os.path.join(output_dir, filename), 'JPEG')

if __name__ == '__main__':
  if len(sys.argv) < 3:
    print 'Usage: python drawseq.py <input_dir> <output_dir>'
    sys.exit(1)

  input_dir, output_dir = sys.argv[1:3] 
  os.path.exists(output_dir) or os.makedirs(output_dir)

  for filename in os.listdir(input_dir):
    if fnmatch.fnmatch(filename.lower(), '*.jpg'):
      process_picture(filename)
Python 相关文章推荐
Python引用(import)文件夹下的py文件的方法
Aug 26 Python
简单的编程0基础下Python入门指引
Apr 01 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
python使用Matplotlib画条形图
Mar 25 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
Python类的继承用法示例
Jan 31 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
numpy数组广播的机制
Jul 12 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 Python
python写入中英文字符串到文件的方法
May 06 #Python
python使用xlrd模块读写Excel文件的方法
May 06 #Python
在Python中使用全局日志时需要注意的问题
May 06 #Python
python通过post提交数据的方法
May 06 #Python
python实现逆波兰计算表达式实例详解
May 06 #Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 #Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 #Python
You might like
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
关于Javascript 的 prototype问题。
2007/01/03 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
点评js异步加载的4种方式
2015/12/22 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
Vue.js 点击按钮显示/隐藏内容的实例代码
2018/02/08 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
python中验证码连通域分割的方法详解
2018/06/04 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
python如何调用字典的key
2020/05/25 Python
python 获取字典键值对的实现
2020/11/12 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
导航工程专业自荐信
2014/09/02 职场文书
普通话演讲稿
2014/09/03 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
导游词之湖北武当山
2019/09/23 职场文书