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

   这篇文章主要介绍了Python中用PIL库批量给图片加上序号的教程,PIL库是Python中一个非常强大的处理图片的库,需要的朋友可以参考下

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

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

  效果图


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

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

#!/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)

时间: 2025-01-01 17:51:34

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

python通过pil模块将raw图片转换成png图片的方法_python

本文实例讲述了python通过pil模块将raw图片转换成png图片的方法.分享给大家供大家参考.具体分析如下: python通过pil模块将raw图片转换成png图片,pil中包含了fromstring函数可以按照指定模式读取图片信息然后进行保存. rawData = open("foo.raw" 'rb').read() imgSize = (x,y) # Use the PIL raw decoder to read the data. # the 'F;16' informs

在Python中用PIL做验证码

为了防垃圾机器人,验证码是一种常用的手段.而自己来实现验证码也是很简单的事,只需要了解一点图像处理的方法就可以了. PIL 是 Python 的一个图像处理库,可以很方便地处理位图. 首先考虑验证的制作方法,我们只想简单点的情况: 生成一个固定大小的白色图片. 在图片上随机写几个字母. 就是这样,最简单的情况.我们先实现,再看怎么能加点变化,以至不那么容易被破掉. 后面不会细讲 PIL 的使用方法,有兴趣,请浏览官方的文档. 1. 基本操作 先来看如何得到一张带指定字母的图片. PIL 中对图片

php使用GD库实现文字图片水印及缩略图教程

我们要使用gd库就必须先打开gd库,具体如下 Windows下开启PHP的GD库支持 找到php.ini,打开内容,找到: ;extension=php_gd2.dll 把最前面的分号";"去掉,再保存即可,如果本来就没有分号,那就是已经开启了. 具体可以参考下文:http://www.111cn.net/phper/php/48352.htm 一:添加文字水印 使用方法 require 'image.class.php' $src="001.jpg"; $cont

利用photoshop给图片加上柔和暖色教程

本教程的调色效果非常不错,不过作者整体调色过程都是在同一层完成,这需要较强的美感,因为一步出错又要返回去调整.建议使用调整图层来调整,这样操作简单,同时也比较好修改. 原图 <点小图查看大图>   最终效果   1.打开原图素材,把背景图层复制一层,然后新建一个图层,如下图. 2.然后选中"图层 1",选择"编辑"-"填充" 在RGB数值里输入图片中的数值,然后确定. 3.接着将"图层 1"的混合模式设置为&quo

python通过pil为png图片填充上背景颜色的方法

 这篇文章主要介绍了python通过pil为png图片填充上背景颜色的方法,实例分析了Python使用pil模块操作png图片的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了python通过pil为png图片填充上背景颜色的方法.分享给大家供大家参考.具体分析如下: png图片有些是没有背景颜色,如果希望以单色(比如白色)填充背景,可以使用下面的代码,这段代码将当前目录下的 jb51.net.png图片填充了白色背景. 使用指定的颜色的背景色即可,然后把该图片用alpha通

python以环状形式组合排列图片并输出的方法

 这篇文章主要介绍了python以环状形式组合排列图片并输出的方法,涉及Python使用pil库操作图片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python以环状形式组合排列图片并输出的方法.分享给大家供大家参考.具体分析如下: 这段代码可以自定义一个空白画板,然后将指定的图片以圆环状的方式排列起来,用到了pil库,可以通过: pip install pil 的方式安装. 具体代码如下: 代码如下: # -*- coding: utf-8 -*- __autho

Python通过PIL获取图片主要颜色并和颜色库进行对比的方法

 这篇文章主要介绍了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法,实例分析了Python通过PIL模块操作图片的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了Python通过PIL获取图片主要颜色并和颜色库进行对比的方法.分享给大家供大家参考.具体分析如下: 这段代码主要用来从图片提取其主要颜色,类似Goolge和Baidu的图片搜索时可以指定按照颜色搜索,所以我们先需要将每张图片的主要颜色提取出来,然后将颜色划分到与其最接近的颜色段上,然后就可以按照

Python中使用PIL库实现图片高斯模糊实例_python

一.安装PIL PIL是Python Imaging Library简称,用于处理图片.PIL中已经有图片高斯模糊处理类,但有个bug(目前最新的1.1.7bug还存在),就是模糊半径写死的是2,不能设置.在源码ImageFilter.py的第160行: 所以,我们在这里自己改一下就OK了. 项目地址:http://www.pythonware.com/products/pil/ 二.修改后的代码 代码如下: 复制代码 代码如下: #-*- coding: utf-8 -*- from PIL

Python批量按比例缩小图片脚本分享

  这篇文章主要介绍了Python批量按比例缩小图片脚本分享,本文直接给出实现代码,需要的朋友可以参考下 图片太大了,上百张图用photoshop改太慢,就想到用python写个简单的批处理.功能简单就是把原图按比例缩小 代码如下: # -*- coding: cp936 -*- import Image import glob, os #图片批处理 def timage(): for files in glob.glob('D:1*.JPG'): filepath,filename = os.