香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

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


时间:2021-11-29 16:25 作者:admin


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

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

效果图

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

#!/usr/bin/env Python#-*- coding: utf-8 -*-import os, sys, fnmatchimport Image, ImageDraw, ImageFontdef 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)

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)