Python turtle制作书法作品——《鸟鸣涧》

(190) 2024-04-07 08:01:01

本篇以唐王维诗作《鸟鸣涧》为例,介绍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。

Python turtle制作书法作品——《鸟鸣涧》 (https://mushiming.com/)  第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))

Python turtle制作书法作品——《鸟鸣涧》 (https://mushiming.com/)  第2张

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()

执行结果如下:

Python turtle制作书法作品——《鸟鸣涧》 (https://mushiming.com/)  第3张

3 由上述程序生成的书法作品《鸟鸣涧》 

当句子比较长时,可以布局为楹联格式,如图4所示。

Python turtle制作书法作品——《鸟鸣涧》 (https://mushiming.com/)  第4张

图4 书法作品《易经第一卦》

THE END

发表回复