(图书介绍:童晶:《Python趣味创意编程》新书预告)
本章我们将实现定制字符画的效果,如图所示。首先对图片均匀采样、显示字符;然后对字符串的元素进行遍历,实现一段文字的替换显示;最后根据字体大小调整采样位置,并添加一定的随机性。
14 定制字符画
视频教程:
最终代码:
def setup():
global img,string # 全局变量
img = loadImage("image2.jpg") # 导入图片文件
size(500, 500) # 画面大小
myFont=createFont("simsun.ttc",13) # 导入宋体,设置字体大小
textFont(myFont) # 设置文字字体
textAlign(CENTER) # 文字居中对齐
string = u"Python创意编程真有趣 " # 要显示的字符串
def draw():
background(255) # 白色背景
stringId = 0 # string中要显示的字符序号
step = int(map(mouseX,0,width,5,20)) # 鼠标左右位置设置文字大小
space = map(mouseY,0,height,0,step/2)#鼠标上下位置设置文字行间距离
y = 0 # y坐标从0开始
while y<=height: # 当y坐标不超过height时循环
x = space*noise(100+0.1*y) # 每一行x坐标从随机位置开始
while x<=width: # 当x坐标不超过width时循环
yNoise = noise(0.1*x,0.1*y)*space*2 # y坐标加一些随机扰动
c = img.get(int(x), int(y+yNoise)) # 获得这个采样点的颜色
fill(c) # 设置文字颜色
bright = brightness(c) # 当前像素的亮度值
ts = map(bright, 0,255,step*1.5,step*0.5) # 越暗文字越大
textSize(ts) # 设置文字大小
letter = string[stringId] # 取对应序号的文字
text(letter, x, y+yNoise) # 在对应位置上显示文字
stringId += 1 # 对应字符序号加1
if stringId > len(string)-1: # 字符序号超出范围
stringId = 0 # 重新设为0
# 每次字符串结束后空随机大小
x += 2*space*noise(100+0.1*x,100+0.1*y)
# x坐标向右,跨过文字宽度,有一定随机性
x += textWidth(letter) + 0.5*space*noise(0.1*x,0.1*y)
y += step + space # 一行处理好后,y坐标增加
这一章主要学习了字符串元素的遍历、文字大小的设置,利用这些知识实现了定制字符画。除了利用字符,读者也可以尝试把一些小图片作为绘制基本元素,来逼近另一张图片的显示效果。
更多推荐
第14章 定制字符画(《Python趣味创意编程》教学视频)
发布评论