pil写扭曲中文示例

中文,扭曲字体,示例,
windows,PIL 1.1.6, python2.5
要在linux上还不知要装几个模块,
前面的是写中文,后面的是在这基础上扭曲图形,只是利用Image的load(这是1.1.6+版本才支持的),折腾一个cos的函数,有点效果,换成sin差不多。如果还能用另外的函数,不知能折腾出啥样图案来。
#-*-  encoding: utf-8  -*-
import Image
import ImageFont, ImageDraw
chinacha = '世界'
im = Image.new('RGBA',(400,300))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype('msyh.ttf',30)
draw.text((10,25),'world',font=font,fill='rgb(110,0,255)')
draw.text((100,25),chinacha.decode('gb2312'),font=font,fill='rgb(110,0,255)')
# 隶书
font1 = ImageFont.truetype('STLITI.TTF',50)
draw.text((100,100),chinacha.decode('gb2312'),font=font1,fill='green')
#transfomrdata = (1.1,-0.5,0,-0.5,1.3,0,)
#im = im.transform((400,300),Image.AFFINE,transfomrdata)
im.save('e:\piltest2.png')
import math,random
im = Image.open('e:\piltest2.png','r')
newim = Image.new('RGBA',(400,300))
pix = im.load()
newpix = newim.load()
w, h = im.size
#offx = random.randint(5,10) # x方向位移
#offy = 2  #振幅
#angley = random.random() #   recommend: 0 ~ 1,  摆动频率
#测试下来,修改angley效果最佳,可在0~1之间,或者50之类出来的效果都还是有的,
#具体里面的函数关系折腾不出来了,琢磨着和字体大小也有关系
offx = 10
offy = 2
angley = 10
for x in range(0,w):
    for y in range(0,h):
        x1 = int(x -offx + offy * math.cos(angley * y))
        if x1  0:  newpix[x1, y] = pix[x, y]
newim.save('e:\piltest5.png')