11

# -*- 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")





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值