Python中用PIL库批量给图片加上序号的教程
作者:goldensun 发布时间:2021-04-08 01:55:46
标签:Python
女友让我给她论文的图片上加上字母序号,本来觉得是个很简单的事情,但那个白底黑字的圆圈序号却难住了我, 试了几个常用的软件,都不行。
后来用 PS + 动作,倒是能搞出来,不过也不容易,正好那天没搞完,于是拿回自己家做,但我的电脑上又没有 PS, 所以就用 python 实现了。
效果图
这里用的图片全是 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)
0
投稿
猜你喜欢
- 如何发送一个XMLHttpRequest的检索的特定部分HTML标题数据。<html> <head> <tit
- 在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试1、编写一个登录的接口2、在pyc
- Vue2.x用法全局注册Vue.directive( 指令名, { 自定义指令生命周期 } )局部注册directives: { 指令名,
- 人脸磨皮是最基础的人脸美颜效果。主要分为祛斑,祛痘,淡化黑眼圈等步骤。通过前面的学习相信大家一眼都看得出来我们需要干什么才能识别人脸磨皮效果
- 如下所示:a = [0,1,2,3,4,5,6,7,8,9]b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象b
- css可以处理16,777,216颜色,可以使用名字、rgb值或十六进制代码。red红色等同于 rgb(255,0,0) &nbs
- 一、安装 FastAPI 和uvicorn可以使用 pip 命令进行安装:pip install fastapi uvicorn二、创建&n
- vuex的理论知识就不多提了,官网上已经有明确的讲解。用一个简单的例子来描述一下基本的用法:第一步:npm install vuex –sa
- 本文实例讲述了windows下Python实现将pdf文件转化为png格式图片的方法。分享给大家供大家参考,具体如下:最近工作中需要把pdf
- 1、Git本地版本库结构如下图所示:工作区(Working Directory)添加、编辑、修改、删除文件等操作。暂存区(Stage)打算提
- 相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证、自动完成等,今天在开发中遇到自动完成中需要获取
- 工厂模式: “工厂”即表示一个负责创建其他类型的对象的类,通常情况下,一个工厂的对象会有一个或多个方法与之关联,这些方法用于创建不同类型的对
- 本文实例讲述了python中xrange用法。分享给大家供大家参考。具体如下:先来看如下示例:>>> x=xrange(0
- 如下所示:# -*- coding:UTF-8 -*-__author__ = "zhangguodong"__time
- 内容摘要:图片随机显示是一个应用非常广泛的技巧。比如随机banner的显示,当你进入一个网站时它的banner总是不同的,或者总有内容不同的
- 前言如果大家在网上搜索Python 正则表达式,你将会看到大量的垃圾文章会这样写代码:import repattern = re.compi
- 什么是PRC&GRPCRPC是远程过程调用(Remote Procedure Call)的缩写形式, RPC 的主要功能目标是让构建
- easy_install 和 pip的介绍:easy_install和pip都是用来下载安装Python一个公共资源库PyPI 的相关资源包
- 如何使用Iframe实现本页提交?例:chunfeng.html< html>< head>&n
- 本文实例讲述了Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法。分享给大家供大家参考,具体如下:问题输入第1行:字符串A第