侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python生成数字图片代码分享

Python  /  管理员 发布于 7年前   416

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

最终版本

# -*- coding:utf-8 -*-from PIL import Image,ImageFont,ImageDraw,ImageFilterimport randomimport osimport timeclass 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,ImageFilterimport randomimport osclass 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,ImageFilterimport randomimport osimport timeclass 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,ImageFilterimport randomimport osimport timeimgWidth = 20imgHeight = 24fontSize = 28backGroundColor = (255,)*4fontColor = (0,)*3text = '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)/2textTop = (imgHeight-textHeight)/2draw = ImageDraw.Draw(codeimg)draw.text(xy=(textLeft,textTop),text=text,fill=fontColor,font=font)rot = codeimg.rotate(90,expand=0)codeimg.rotatefff = Image.new('RGBA', rot.size,backGroundColor)codeimg = Image.composite(rot, fff, rot)codeimg.show()# codeimg.save('./codes/test.jpg')

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


  • 上一条:
    你眼中的Python大牛 应该都有这份书单
    下一条:
    python使用标准库根据进程名如何获取进程的pid详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客