(图书介绍:童晶:《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趣味创意编程》教学视频)