您的位置 首页 > 故事语录 > 励志语录

【qq搞笑留言代码】70 行 Python 代码写春联,支持行书隶书楷书

作者|徐祥武责任系列|张红月

制作| CSDN博客

两年前的今天,我写了一篇名为《用Python写春联:抒写最真诚的祝福和最美好的祈愿》()的文章,引起了书法爱好者的关注。

该文用的是田英章老师的楷书,我在网上总共找到了1600个汉字,因此,春联用字被限制在这1600个汉字的小字库中。

当下2022年新年的钟声即将敲响,过往的这篇旧文又再次被网友们翻出,每日浏览量超过5000人次。由于字库过小,连很多常用字都没有收入,很多朋友留言,要求扩容字库以及支持其他字体。我个人精力有限,同时受知识产权保护的限制,不可能制作完整的毛笔字库。那么,能否借用现有的矢量字库,满足朋友们的要求呢?

经过一番尝试,发现操作系统自带的某些矢量字库,是可以作为毛笔字库使用的。以下是简单的演示代码,仅供学习编程技术之用,绝无侵犯字体权利人之权力的故意,特此声明。

选择矢量字库

虽然有很多方法可以帮你呈现出系统支持的所有字体文件,我建议最直接的方式是去查看操作系统的字体目录。以Windows为例,我直接在C:\Windows\FONTs这个路径下找到了“华文隶书”这个字库文件,查看属性可知,该文件名为STLITI.TTF。找到了喜欢的字库文件,只需要将其全路径文件名替换到代码中的FONT_FILE常量即可,不需要做其他操作。

选择一款喜欢的春联背景图案

还是以“龙凤呈祥”这个图案为例。如果换用其他的图案,请确保图案是.png格式(背景透明),且是方形的。同字体文件一样,我们需要将这个背景图案的全路径文件名替换到代码中的BG_FILE常量即可。

完整代码

全部代码总共70余行,使用方法请看注释。

# -*- coding: utf-8 -*-
import osimport freetypeimport numpy as npfrom PIL import Image
FONT_FILE = r'C:\Windows\Fonts\STLITI.TTF'BG_FILE = r'D:\temp\bg.png'
def text2image(word, font_file, size=128, color=(0,0,0)): """使用指定字库将单个汉字转为图像 word - 单个汉字字符串 font_file - 矢量字库文件名 size - 字号,默认128 color - 颜色,默认黑色 """ face = (font_file) (size*size) (word) btm_obj = w, h = b, b pixels = np.array, dtype=np.uint8).reshape(h, w) dx = in) if dx > 0: patch = np.zero[0], dx), dtype=np.uint8) pixels = np.hstack((patch, pixels)) r = np.one) * color[0] * 255 g = np.one) * color[1] * 255 b = np.one) * color[2] * 255 im = np.dstack((r, g, b, pixels)).astype) return Image.fromarray(im)
def write_couplets(text, horv='V', quality='L', out_file=None, bg=BG_FILE): """写春联 text - 春联字符串 bg - 背景图片路径 horv - H-横排,V-竖排 quality - 单字分辨率,H-640像素,L-320像素 out_file - 输出文件名 """ size, tsize = (320, 128) if quality == 'L' else (640, 180) ow, oh = (size, size*len(text)) if horv == 'V' else (size*len(text), size) im_out = Image.new('RGBA', (ow, oh), '#f0f0f0') im_bg = Image.open(BG_FILE) if size < 640: im_bg = im_bg.resize((size, size)) for i, w in enumerate(text): im_w = text2image(w, FONT_FILE, size=tsize, color=(0,0,0)) w, h = im_w.size dw, dh = (size - w)//2, (size - h)//2 if horv == 'V': im_out.paste(im_bg, (0, i*size)) im_out.paste(im_w, (dw, i*size+dh), mask=im_w) else: im_out.paste(im_bg, (i*size, 0)) im_out.paste(im_w, (i*size+dw, dh), mask=im_w) im_out.save('%s.png'%text) os.startfile('%s.png'%text)
if __name__ == '__main__': write_couplets('普天同庆', horv='V', quality='H') write_couplets('欢度春节', horv='V', quality='H') write_couplets('国泰民安', horv='H', quality='H')

样例

最后,祝大家新年快乐,虎年大吉,虎虎生威,身体健康,事事顺心。

原文链接:

《新程序员003》正式上市,50余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等30多家知名公司云原生和数字化一手实战经验!

关于作者: admin

无忧经验小编鲁达,内容侵删请Email至wohenlihai#qq.com(#改为@)

热门推荐