|
PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作。
下面是我用来生成字母或字符串测试图片而写的类及测试代码。
主要用到的模块:
PIL.Image,PIL.ImageDraw,PIL.ImageFont
PIL.Image用来生成一个空的图片,ImageDraw用来在空图片上画图及写字符,ImageFont则是创建需要使用到的字体
主要用到的代码:
#创建一个空的图片
self.img = Image.new(self.imgMode, self.imgSize, self.bg_color)
self.drawBrush = ImageDraw.Draw(self.img)#创建画刷,用来写文字到图片img上
#创建字体,fontFile为字体文件,若非系统字体需加详细路径
self.font = ImageFont.truetype(fontFile,fontsize)
#使用特定字体写字,(textX0,textY0)为文字开始的左上角起始位置
self.drawBrush.text((textX0,textY0), self.letters, fill=self.fg_color,font=self.font)
详细代码:
#-*- coding:gb2312 -*-
from PIL import Image,ImageDraw,ImageFont,ImageOps
import numpy as np
import random
class LetterImage():
def __init__(self,fontFile='',imgSize=(0,0),imgMode='RGB',bg_color=(0,0,0),fg_color=(255,255,255),fontsize=20):
self.imgSize = imgSize
self.imgMode = imgMode
self.fontsize = fontsize
self.bg_color = bg_color
self.fg_color = fg_color
# self.font = ImageFont.load('车牌字体.ttf')
if ''==fontFile:
self.font = ImageFont.truetype('DIN1451.ttf', fontsize)
else:
self.font = ImageFont.truetype(fontFile,fontsize)
def GenLetterImage(self,letters):
'''Generate the Image of letters'''
self.letters = letters
(self.letterWidth,self.letterHeight) = self.font.getsize(letters)
if self.imgSize==(0,0):
self.imgSize=(self.letterWidth+2,self.letterHeight+2)
self.imgWidth,self.imgHeight=self.imgSize
self.img = Image.new(self.imgMode, self.imgSize, self.bg_color)
self.drawBrush = ImageDraw.Draw(self.img)
textY0 = (self.imgHeight-self.letterHeight+1)/2
textY0 = int(textY0)
textX0 = int((self.imgWidth-self.letterWidth+1)/2)
print 'text location:',(textX0,textY0)
print 'text size (width,height):',self.letterWidth,self.letterHeight
print 'img size(width,height):',self.imgSize
# if textX0 |
|
|