本篇以唐王维诗作《鸟鸣涧》为例,介绍Python用turtle制作书法作品。
一、繁体字库安装
书法作品以繁体字为主,图章一般用方篆体或印章篆体,文字一般用小篆、行书、行楷、草书等。本例使用“印章篆体”制作印章,使用“方正小篆体”书写书法主体文字,落款使用“汉仪行楷繁”字体。所以要运行本案例,需要预先下载并安装“印章篆体”、“方正小篆体”和“汉仪行楷繁”三种字体,当然也可以用其他字体替代,但效果会不一样。
二、印章制作
书法作品落款一般用方章,文字可用“某某某印”,外加方框。
常规画方框用四个直线+(90°)转弯绘制,本篇介绍用circle()方法绘制方框,没有错,用画圆方法绘制。画圆函数的语法结构如下:
turtle.circle(radius,extent=None, steps=None)
其中:radius为数值,表示圆的半径,如果半径为正则按逆时针方向绘制圆弧,否则按顺时针方向绘制圆弧;extent(可选)为数值,表示从当前位置开始绘制圆弧的角度,如果缺省则绘制整个圆;steps(可选)为整数,表示分多少段绘制指定角度的弧或整圆(内接多边形)
由于圆是由内接正多边形近似绘制的,因此steps决定要使用的段数。如果未给出,将自动计算。可以用来画正多边形。
常规编程为:
for i in range(4):
tl.fd(d)
tl.lt(90)
用circle()编程为:
turtle.circle(d*0.707,360, 4)
但用circle()绘制多边形时,当前点是其中的一个顶点,所以上述语句绘制出来的是一个菱形,需要预告右转90°,才能绘制正方形。
印章分“阳刻”与“阴刻”,阳刻:外框和文字为印泥颜色、空白处为背景颜色;阴刻:外框和文字为背景颜色、空白处为印泥颜色。
用turtle制作印章时,阳刻用印泥色绘制方框,用背景色填色,再用印泥色绘制文字;阴刻用背景色绘制方框,用印泥色填色,再用背景色绘制文字。参见图1。
图1 印章(左为阳刻、右为阴刻)
三、文字竖排显示输出
turtle绘制文字使用write()方法,语法结构如下:
write(arg, move=False,, font=('Arial', 8,'normal'))
其中:arg为必选参数,用于指定要输出的文字内容,该内容以当前光标所在坐标为左下角输出到屏幕;move(可选参数),逻辑值,指定光标是否跟随,默认为False,不跟随(光标位置不变);align(可选参数)用于设置对齐方式,取'left'、'center'或'right'中的一个,表示左对齐、居中对齐或右对齐,默认为左对齐;font(可选参数)用于设置字体、字号和字型,为三元组(字体名称, 字号大小, 字型)。
说明:如果move设置为True,光标将移动到输出文字的右下角;字型设为'normal'表示正常、'bold'表示粗体、'italic'表示斜体、'underline'表示加下划线等。
由于同字体同字号的汉字的宽度是相同的,所以只要字与字之间加入换行符(\n)用write()方法显示输出时就会显示在同一列上。
str = '这是个测试'
str = '\n'.join(list(str))
write(str, font=('汉仪行楷繁', 36))
图2 文字竖排效果图
四、制作书法作品《鸟鸣涧》
唐王维《鸟鸣涧》诗为五言四句:
人闲桂花落,夜静春山空。
月出惊山鸟,时鸣春涧中。
竖排基本上呈方形,用“团扇”格式表达比较合适。先绘制圆形“团扇”,再在其上从右到左书写《鸟鸣涧》四名诗,在左侧添加落款和印章。
完整的制作程序如下:
############################################
# 设计 Zhang Ruilin 创建 2021-12-15 07:26 #
# Python用turtle制作书法作品——《鸟鸣涧》 #
# 要运行本程序并产生书法效果,您的电脑需要 #
# 安装印章篆体、方正小篆体和汉仪行楷繁字体 #
############################################
import turtle as tl
tl.setup(600,600)
tl.bgcolor('ivory') # 象牙色,作品装裱色
bgcolor = 'wheat' # 小麦色,作品背景色
tl.dot(550, bgcolor)
def downwards(_str,_font,_size=45): # 文字转竖排,从上向下显示
_words = list(_str) # 字符转列表
_str = '\n'.join(_words) # 列表连接成字符串
tl.write(_str,font=(_font,_size,'normal')) # 竖排显示输出
def yin(_word='red',_back='white'): # 绘制印章,_word印章颜色,
tl.pensize(1) # _back印章背景色,控制_word
tl.color(_word,_back) # 和_back可产生阳刻和阴刻效果
tl.begin_fill()
tl.rt(45)
tl.pd()
tl.circle(20,steps=4)
tl.end_fill()
tl.lt(45)
tl.fd(3)
tl.write('瑞\n林',font=('印章篆体',10,'normal'))
tl.fd(13)
tl.write('张\n印',font=('印章篆体',10,'normal'))
tl.pu()
if __name__ == '__main__':
tl.pu()
tl.goto(150,-160)
downwards('人闲桂花落','方正小篆体',45)
tl.goto(70,-160)
downwards('夜静春山空','方正小篆体',45)
tl.goto(-10,-160)
downwards('月出惊山鸟','方正小篆体',45)
tl.goto(-90,-160)
downwards('时鸣春涧中','方正小篆体',45)
tl.goto(-150,-100)
downwards('鸟鸣涧诗 唐王维','汉仪行楷繁',15)
tl.goto(-180,-150)
downwards('辛丑年冬月瑞林制作于杭州','汉仪行楷繁',15)
tl.goto(-155,-135)
yin('red',bgcolor)
tl.goto(-155,-170)
yin(bgcolor,'red')
tl.ht()
tl.done()
执行结果如下:
图3 由上述程序生成的书法作品《鸟鸣涧》
当句子比较长时,可以布局为楹联格式,如图4所示。
图4 书法作品《易经第一卦》