Python生成数字图片代码分享


Posted in Python onOctober 31, 2017

本文向大家分享了几段Python生成数字图片的代码,喜欢的朋友可以参考。具体如下:

最终版本

# -*- coding:utf-8 -*-
from PIL import Image,ImageFont,ImageDraw,ImageFilter
import random
import os
import time
class Code(object):
  def __init__(self, imgSize=(35,35),\
    fontSize=25, bgColor=(255,)*4, fontColor=(0,0,0)):
    self.imgSize = imgSize
    self.fontSize = fontSize
    self.bgColor = bgColor
    self.fontColor = fontColor
  def setFontSize(self, size):
    self.fontSize = size;
  def getDigit(self, digit):
    return str(digit)
  def getPannel(self):
    pannel = Image.new('RGBA',self.imgSize,self.bgColor)
    return pannel
  def getFont(self, fontFile='./Arial.ttf'):
    return ImageFont.truetype(fontFile, self.fontSize)
  def getTextPos(self, digit, font):
    text = self.getDigit(digit)
    textWidth,textHeight = font.getsize(text);
    imgWidth,imgHeight = self.imgSize
    textPos = ((imgWidth-textWidth)/2, (imgHeight-textHeight)/2)
    return textPos
  def rotateImg(self,image,angle=0, expand=0):
    rot = image.rotate(angle, expand)
    fff = Image.new('RGBA',rot.size,self.bgColor)
    image = Image.composite(rot, fff, rot)
    return image
  def createImg(self, digit, font, angle):
    codeImg = Image.new('RGBA',self.imgSize,self.bgColor)
    draw = ImageDraw.Draw(codeImg);
    text = self.getDigit(digit)
    textPos = self.getTextPos(digit, font)
    draw.text(xy=textPos,text=text,fill=self.fontColor,font=font)
    codeImg = self.rotateImg(codeImg,angle)
    return codeImg
  def saveImg(self, img, savePath, imgName):
    img.save(savePath+'/'+imgName)
def createPath(path):
  if not os.path.exists(path):
    os.makedirs(path)
def createImages(code,rootPath='./images',digitList=range(10), fontSizeList=range(18,30),\
  angleList=[(45,90),(-45,45),(-45,-90)]):
  for index,angles in enumerate(angleList):
    if index==0:
      angleRange = '-90_-45'
    elif index == 1:
      angleRange = '-45_45'
    else:
      angleRange = '45_90'
    anglepath = os.path.join(rootPath, angleRange)
    createPath(anglepath)
    for digit in digitList:
      digitpath = os.path.join(anglepath, 'x'+str(digit))
      createPath(digitpath)
      for size in fontSizeList:
        angle = round(random.uniform(angles[0], angles[1]),5)
        code.setFontSize(size)
        imgName = str(digit)+'_'+str(size)+'_'+str(angle)+'.jpg'
        img = code.createImg(digit, code.getFont(),angle)
        code.saveImg(img, digitpath, imgName)

if __name__ == '__main__':
  imagesPath = './images'
  if os.path.exists(imagesPath):
    os.system('rm -rf '+imagesPath)
  os.mkdir(imagesPath)
  code = Code()
  for i in range(1000):
    createImages(code)
  # test ...
  # code = Code()
  # img = code.createImg(5,code.getFont(),0)
  # code.saveImg(img, savePath, 'test.jpg')
  # img.show()
  print 'hello'
# -*- coding:utf-8 -*-
from PIL import Image,ImageFont,ImageDraw,ImageFilter
import random
import os
class Captcha(object):
  def __init__(self,size=(20,24),fontSize=20):
    self.font = ImageFont.truetype('./fonts/Arial.ttf',fontSize)
    self.size = size
    self.image = Image.new('RGBA',self.size,(255,)*4)
    # self.texts = self.randNum(1)
    self.text = ''
  def rotate(self, angle):
    # rot = self.image.rotate(random.randint(-10,10),expand=0)
    rot = self.image.rotate(angle,expand=0)
    fff = Image.new('RGBA',rot.size,(255,)*4)
    self.image = Image.composite(rot,fff,rot)
  def randColor(self):
    self.fontColor = (random.randint(0,250),random.randint(0,250),random.randint(0,250))
  # def randNum(self,bits):
  #   return ''.join(str(random.randint(0,9)) for i in range(bits))
  def setNum(self, num):
    return num;
  def write(self,text,x,y):
    draw = ImageDraw.Draw(self.image)
    draw.text((x,y),text,fill=self.fontColor,font=self.font)
  def writeNum(self, num, angle):
    x = 2
    y = -2
    self.text = num
    self.fontColor = (0, 0, 0)
    self.write(num, x, y)
    self.rotate(angle)
    return self.text
    # character
    # xplus = 15
    # for text in self.texts:
      # self.randColor()
      # self.fontColor = (0, 0, 0)
      # self.write(text, x, y)
      # self.rotate(angle)
      # self.rotate(random.randint(-10,10))
      # x += xplus
    # return self.texts
  def save(self, save_path):
    # self.image.save('captcha.jpg')
    self.image.save(save_path)
pic_root_path = './pic'
if not os.path.exists(pic_root_path):
  os.mkdir(pic_root_path)
angles = [(45,90),(-45,45),(-90,-45)]
for i in range(10):
  pic_num_path = os.path.join(pic_root_path, 'pic'+str(i))
  if not os.path.exists(pic_num_path):
    os.mkdir(pic_num_path)
  for angle_i in angles:
    angle_name = str(angle_i[0])+'_'+str(angle_i[1])
    pic_angle_path = os.path.join(pic_num_path, angle_name)
    if not os.path.exists(pic_angle_path):
      os.mkdir(pic_angle_path)
    for angle in range(angle_i[0], angle_i[1]):
      for fontsize in range(25,28):
        img = Captcha(size=(20, 24), fontSize=fontsize)
        num = img.writeNum(str(i), angle)
        img_name = str(i)+'_'+str(fontsize)+'_'+str(angle)+'.bmp'
        save_path = os.path.join(pic_angle_path, img_name)
        img.save(save_path)

  # img = Captcha()
  # num = img.writeNum(str(i), random.randint(-90,-45))
  # img_name = str(i)+'.jpg'
  # pic_path = './pic'+str(i)
  # if not os.path.exists(pic_path):
  #   os.mkdir(pic_path)
  # save_path = os.path.join(pic_path, img_name)
  # save_path = os.path.join(pic_root_path, save_path)
  # img.save(save_path)
# img.image.show()
# img.save()

随机生成各种size和旋转角度的单个数字图片

# -*- coding:utf-8 -*-
from PIL import Image,ImageFont,ImageDraw,ImageFilter
import random
import os
import time
class Captcha(object):
  def __init__(self,size=(20,24),fontSize=20):
    self.font = ImageFont.truetype('./fonts/Arial.ttf',fontSize)
    self.size = size
    self.image = Image.new('RGBA',self.size,(255,)*4)
    self.text = ''
  def rotate(self, angle):
    rot = self.image.rotate(angle,expand=0)
    fff = Image.new('RGBA',rot.size,(255,)*4)
    self.image = Image.composite(rot,fff,rot)
  def randColor(self):
    self.fontColor = (random.randint(0,250),random.randint(0,250),random.randint(0,250))

  def setNum(self, num):
    return num;
  def write(self,text,x,y):
    draw = ImageDraw.Draw(self.image)
    draw.text((x,y),text,fill=self.fontColor,font=self.font)
  def writeNum(self, num, angle):
    x = 2
    y = -2
    self.text = num
    self.fontColor = (0, 0, 0)
    self.write(num, x, y)
    self.rotate(angle)
    return self.text
  def save(self, save_path):
    # self.image = self.image.filter(ImageFilter.EDGE_ENHANCE_MORE) #滤镜,边界加强
    self.image.save(save_path)
pic_root_path = './pic'
if not os.path.exists(pic_root_path):
  os.mkdir(pic_root_path)
angles = [(45,90),(-45,45),(-90,-45)]
for i in range(10):
  pic_num_path = os.path.join(pic_root_path, 'x'+str(i))
  if not os.path.exists(pic_num_path):
    os.mkdir(pic_num_path)
  for angle_i in angles:
    angle_name = str(angle_i[0])+'_'+str(angle_i[1])
    pic_angle_path = os.path.join(pic_num_path, angle_name)
    if not os.path.exists(pic_angle_path):
      os.mkdir(pic_angle_path)
    for fontsize in range(25,29):
      for j in range(2500):
        # Keep 5 decimal places
        angle = round(random.uniform(angle_i[0], angle_i[1]),5) 
        img = Captcha(size=(20, 24), fontSize=fontsize)
        num = img.writeNum(str(i), angle)
        img_name = 'x'+str(j)+'_'+str(fontsize)+'_'+str(angle)+'_'+str(num)+'.jpg'
        save_path = os.path.join(pic_angle_path, img_name)
        img.save(save_path)

文字居中

# -*- coding:utf-8 -*-
from PIL import Image,ImageFont,ImageDraw,ImageFilter
import random
import os
import time
imgWidth = 20
imgHeight = 24
fontSize = 28
backGroundColor = (255,)*4
fontColor = (0,)*3
text = '0'
font = ImageFont.truetype('./Arial.ttf', fontSize)
codeimg = Image.new('RGBA',(imgWidth,imgHeight), backGroundColor)
imagePath = './codes'
if not os.path.exists(imagePath):
  os.mkdir(imagePath)
textWidth, textHeight = font.getsize(text)
textLeft = (imgWidth-textWidth)/2
textTop = (imgHeight-textHeight)/2
draw = ImageDraw.Draw(codeimg)
draw.text(xy=(textLeft,textTop),text=text,fill=fontColor,font=font)
rot = codeimg.rotate(90,expand=0)
codeimg.rotate
fff = Image.new('RGBA', rot.size,backGroundColor)
codeimg = Image.composite(rot, fff, rot)
codeimg.show()
# codeimg.save('./codes/test.jpg')

以上就是本文关于Python生成数字图片代码分享的全部内容,希望对大家有所帮助。欢迎参阅:Python列表删除的三种方法代码分享Python文件的读写和异常代码示例等,有问题可以随时留言,欢迎大家交流讨论。

Python 相关文章推荐
python类定义的讲解
Nov 01 Python
Python SQLite3数据库操作类分享
Jun 10 Python
python实现逆波兰计算表达式实例详解
May 06 Python
Python切换pip安装源的方法详解
Nov 18 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
python中time库的实例使用方法
Oct 31 Python
Django 解决新建表删除后无法重新创建等问题
May 21 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 #Python
Python列表删除的三种方法代码分享
Oct 31 #Python
Python文件的读写和异常代码示例
Oct 31 #Python
Python网络编程详解
Oct 31 #Python
Python中enumerate函数代码解析
Oct 31 #Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 #Python
python中requests库session对象的妙用详解
Oct 30 #Python
You might like
在Debian系统下配置LNMP的教程
2015/07/09 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
JavaScript DOM学习第四章 getElementByTagNames
2010/02/19 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
vue学习笔记之v-if和v-show的区别
2017/09/20 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
Python函数参数操作详解
2018/08/03 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Python使用python-docx读写word文档
2019/08/26 Python
python elasticsearch环境搭建详解
2019/09/02 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
韩国11街:11STREET
2018/03/27 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
少先队工作总结2015
2015/05/13 职场文书