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多进程机制实例详解
Jul 02 Python
TensorFlow saver指定变量的存取
Mar 10 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
python构建指数平滑预测模型示例
Nov 21 Python
QML用PathView实现轮播图
Jun 03 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 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支持页面回退的两种方法[转]
2007/02/14 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
2016/12/12 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
用Python配平化学方程式的方法
2019/07/20 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
中学生操行评语
2014/04/24 职场文书
继承权公证书范本
2015/01/23 职场文书
军事博物馆观后感
2015/06/05 职场文书
护士旷工检讨书
2015/08/15 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
python控制台打印log输出重复的解决方法
2021/05/14 Python
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL