# -*- coding: utf-8 -*-
"""
Created on Wed Aug 24 11:09:04 2016
@author: Administrator
"""
from PIL import Image,ImageDraw,ImageFont,ImageOps
import numpy as np
import random
import math
class LetterImage():
def __init__(self,fontFile='',imgSize=(0,0),imgMode='RGB',bg_color=(0,0,0),fg_color=(255,255,255),fontsize=30):
self.imgSize = imgSize
self.imgMode = imgMode
self.fontsize = fontsize
self.bg_color = bg_color
self.fg_color = fg_color
if ''==fontFile:
self.font = ImageFont.truetype('fonts\\times.ttf', fontsize)
else:
self.font = ImageFont.truetype(fontFile,fontsize)
def GenLetterImage(self,letters,curve,trans):
'''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+100,self.letterHeight+10)
self.imgWidth,self.imgHeight=self.imgSize
self.img = Image.new(self.imgMode, self.imgSize, self.bg_color)
self.drawBrush = ImageDraw.Draw(self.img)
fontWidth = self.letterWidth/len(letters)+1
'''the curve of the word arrange'''
textY0 = (self.imgHeight-self.letterHeight+1)/2
textY0 = int(textY0)
textX0 = int((self.imgWidth-self.letterWidth+1)/2)
if curve == 'sin':
for j in range(len(letters)):
self.drawBrush.text((textX0+fontWidth*j,textY0+2*math.sin(j*math.pi/4)), letters[j], fill=self.fg_color,font=self.font)
#self.drawBrush.text((textX0+fontWidth,textY0), 'e', fill=self.fg_color,font=self.font)
elif curve == 'cos':
for j in range(len(letters)):
self.drawBrush.text((textX0+fontWidth*j,textY0+2*math.cos(j*math.pi/4)), letters[j], fill=self.fg_color,font=self.font)
elif curve == 'tan':
for j in range(len(letters)):
self.drawBrush.text((textX0+fontWidth*j,textY0+2*math.tan(j*math.pi/len(letters)/3)), letters[j], fill=self.fg_color,font=self.font)
def SaveImg(self,saveName=''):
if ''==saveName.strip():
saveName = str(self.letters.encode('utf-8'))+'.png'
fileName,file_format = saveName.split('.')
fileName+='_'+str(self.fontsize)+'.'+file_format
print (fileName,file_format)
self.img.save(fileName, file_format)
def Show(self):
self.img.show()
def clearpictures():
import os
png = os.listdir(os.curdir)
for i in png:
if os.path.splitext(i)[1]==".png":
os.remove(i)
if __name__=='__main__':
letterList = []
fontFiles = ('fonts\\nick.ttf','fonts\\CocaCola.ttf')
bg_color=(0,0,255)
fontsize=(20,40)
curve = 'tan'
trans = [1,-0.7,0,-0.1,1,0]
letterList.append(LetterImage(fontFile=fontFiles[0],bg_color=bg_color,fontsize=fontsize[0]))
letterList.append(LetterImage(fontFile=fontFiles[1],bg_color=bg_color,fontsize=fontsize[1]))
letter=['nick','hellohsdhgddfdfh']
for i in range(len(letter)):
print ("i: "+ str(i))
letterList[i].GenLetterImage(letter[i],curve=curve,trans=trans)
# letterList[i].Show()
# letterList[i].SaveImg()
grayImg = ImageOps.grayscale(letterList[i].img)
grayImg = grayImg.resize((2220,470),resample=Image.BICUBIC)
grayImg = grayImg.transform((3220,770),Image.AFFINE,trans)
#grayImg = grayImg.transform((470,470),Image.AFFINE,[1,0,-200,0.4,1,0])
#grayImg = grayImg.transform((470,470),Image.PERSPECTIVE,[1,0,-100,0.4,1,-100,0.003,-0.003,1])
grayImg.save("wordImg\\"+"newImg3"+str(i)+".png","PNG")
11
最新推荐文章于 2024-06-26 15:44:25 发布