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 29 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python中import机制详解
Nov 14 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
Python调用.NET库的方法步骤
Dec 27 Python
python3中calendar返回某一时间点实例讲解
Nov 18 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文件上传功能
2017/02/17 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
js实现微信聊天效果
2020/08/09 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python中生成Epoch的方法
2017/04/26 Python
图解Python变量与赋值
2018/04/03 Python
python实现手机销售管理系统
2019/03/19 Python
python实现动态创建类的方法分析
2019/06/25 Python
详解Python是如何实现issubclass的
2019/07/24 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
《口技》教学反思
2014/02/21 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
经典婚礼主持词
2014/03/13 职场文书
元旦促销方案
2014/03/15 职场文书
文明班级建设方案
2014/05/15 职场文书
捐款感谢信
2015/01/20 职场文书
2015年科协工作总结
2015/05/19 职场文书
婚育证明样本
2015/06/16 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis