前言
可怜今夕月,向何处,去悠悠?是别有人间,那边才见,光影东头?是天外。空汗漫,但长风浩浩送中秋?飞镜无根谁系?姮娥不嫁谁留?
——宋·辛弃疾
中秋佳节,花好月圆,行书一幅赠与(zhuang)友人(bi)。
我一个程序员,写得了代码不说,还能写一手好字,这么多才多艺的程序员到哪里去找!?
所以这显然是装出来的,我们这类人最擅长的就是利用代码来解决问题,这书法当然是用代码写的。
正文
先放个源码链接,各位可以直接clone然后稍作修改用起来,但记得star一下啊!!
程序完全用python极其标准库turtle写的,先简单介绍一下turtle,如果各位小学有计算机启蒙类课程的话可能还记得这只小海龟,它其实是一个很基础的图形绘制库,主要用来教育小孩进行编程入门学习。他在各个语言内都有实现,而我们今天用的就是它在python语言下的实现。
具体的api各位可以参考官方文档,毕竟给小孩入门编程用的,非常的简单易懂。
实现此程序需要有以下两个功能:
- 写正文与落款:落款其实和正文相同,只是字体大小不一样罢了,因此用同一个函数实现;
- 盖章:因为盖章又分为阴刻和阳刻,具体实现起来还是有些去别的,因此两种盖章方式用两个函数实现。
实现写正文与落款的函数:1
2
3
4
5from turtle import *
def write_in_arts(mystr, font='米芾书法字体', fontsize=60):
pendown()
write(mystr, font=(font, fontsize, 'normal'))
penup()
关于字体,各位可以去网上搜索下载安装(很无脑就不谈了),也可以直接用repo里附带的两个字体
实现阳刻的函数:1
2
3
4
5
6
7
8
9def garland(): # 阳刻
pensize(2)
pencolor('red')
pendown()
for i in range(4): # 爱的魔力转圈圈,其实就是弄个方形然后往里面写字,边框和字体都是红色,背景为白色
forward(56)
left(90)
write('雨散\n花人', font=('经典繁方篆', 20, 'normal')) # 刻上您的诨号的时候要注意印章文字的顺序,比如我的雨花散人(居住在雨花街道的咸鱼)就要像这样写才对
penup()
实现阴刻的函数:1
2
3
4
5
6
7
8
9
10
11
12
def diaglyph(): # 阴刻
pensize(3) # 为了美观,将字体略微设置的大一些
pencolor('white')
fillcolor('red') # 设置填充色为红色
begin_fill() # 对接下来被框起来的部分进行填充
for i in range(4): # 继续爱的魔力转圈圈
forward(56)
left(90)
end_fill() # 填充完毕
write('雨散\n花人', font=('经典繁方篆', 20, 'normal'))
penup()
最后,把上面的函数组装起来,机器人变形出发!!1
2
3
4
5
6
7
8
9
10
11
12def zhuangbi():
penup()
goto(-60, -100) # 文字位置什么的,各位根据需要自己适当调整
write_in_arts('装\n逼', fontsize=90)
goto(-250, 0)
write_in_arts('大\n帅\n逼', fontsize=30)
goto(-270, -70)
garland()
goto(-270, -140)
diaglyph()
hideturtle()
done()
效果如下:

Todo
这个程序还有一些缺陷,但是蛮有意思的,简单搜了一下没有发现同类的小程序,所以计划完善一下给他发布成一个微信小程序(为什么又在立flag呢),因此列一下待改善和开发的点:
- 添加交互,将其发布成微信小程序;
- 正文的文字排版不够智能,排版应该能根据输入自动优化;
- 正文和刻章的字体最好能够提供字体列表进行选择;
- 刻章的文字顺序需要手工调整,改为自动根据输入生成;
- 目前只能刻正方形的章,改为可以支持圆形的章;
- 最后生成的结果通过程序只能保存为eps格式,应当改为能够支持生成多种格式;