Python生成数字图片代码分享

作者:往来白丁 时间:2023-03-02 04:27:18 

本文向大家分享了几段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文件的读写和异常代码示例等,有问题可以随时留言,欢迎大家交流讨论。

来源:http://blog.csdn.net/zwx2445205419/article/details/73481409

标签:python,生成图片
0
投稿

猜你喜欢

  • ASP使用wsImage组件给图片加水印代码

    2010-06-09 19:23:00
  • asp的access数据库备份 压缩 恢复及清理数据库函数

    2008-10-31 12:36:00
  • 那些被我遗忘掉的XHTML标签们

    2008-06-07 14:27:00
  • 是时候不用考虑基于字体大小(em)的设计了

    2009-10-24 13:25:00
  • XML入门教程:XML CDATA的作用

    2007-11-07 14:08:00
  • 数据库Oracle数据的异地的自动备份

    2010-07-27 13:28:00
  • 解决Pycharm运行时找不到文件的问题

    2023-06-15 00:26:39
  • 从零学python系列之从文件读取和保存数据

    2021-02-11 01:51:29
  • Oracle使用PL/SQL操作COM对象

    2010-07-21 12:56:00
  • asp.net生成Excel并导出下载五种实现方法

    2023-07-06 11:01:16
  • asp任何取得多个表单的值

    2008-04-15 15:31:00
  • Javascript调试之console对象——你不知道的一些小技巧

    2023-08-07 19:24:14
  • 我所钟爱的HTML5资源

    2010-07-23 09:25:00
  • Python线程条件变量Condition原理解析

    2022-07-23 02:52:06
  • Yahoo!网站性能最佳体验的34条黄金守则——JavaScript和CSS

    2008-05-29 13:34:00
  • 如何获取浏览器的更多信息?

    2009-11-23 20:48:00
  • 内容,而不是Chrome

    2008-10-16 13:43:00
  • Oracle数据库安全策略分析(二)

    2010-07-31 13:04:00
  • Python基于pygame实现的font游戏字体(附源码)

    2021-04-16 05:06:17
  • 有效地使用 SQL事件探查器的提示和技巧

    2009-01-15 13:39:00
  • asp之家 网络编程 m.aspxhome.com