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中if elif else及缩进的使用简述
May 31 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
Python 列表的清空方式
Jan 13 Python
python with语句的原理与用法详解
Mar 30 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
利用python 读写csv文件
Sep 10 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 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
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
PHP运行模式汇总
2016/11/06 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
python监控键盘输入实例代码
2018/02/09 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python 实现return返回多个值
2019/11/19 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
离婚承诺书格式范文
2015/05/04 职场文书