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中用memcached来减少数据库查询次数的教程
Apr 07 Python
Python实现的简单文件传输服务器和客户端
Apr 08 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
实例讲解Python爬取网页数据
Jul 08 Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 Python
详解python中eval函数的作用
Oct 22 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
Python调用jar包方法实现过程解析
Aug 11 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
PHP 高手之路(二)
2006/10/09 PHP
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python enumerate函数的使用方法总结
2017/11/15 Python
Python常用的json标准库
2019/02/19 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
护理专业自荐信范文
2014/02/26 职场文书
环保志愿者活动方案
2014/08/14 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
医生见习报告范文
2014/11/03 职场文书
初中重阳节活动总结
2015/05/05 职场文书