70 行 Python 代码写春联,行书隶书楷书随你选

前言

相信现在有很多小伙伴都不会写毛笔字了,今天想用python来写一幅春联,不知道有没有人喜欢。该文用的是田英章老师的楷

书,我在网上总共找到了1600个汉字,因此,春联用字被限制在这1600个汉字的小字库中。我个人精力有限,同时受知识产权保

护的限制,不可能制作完整的毛笔字库。那么,能否借用现有的矢量字库,满足朋友们的要求呢?经过一番尝试,发现操作系统

自带的某些矢量字库,是可以作为毛笔字库使用的。以下是简单的演示代码,仅供学习编程技术之用,绝无侵犯字体权利人之权

力的故意,特此声明。

选择矢量字库

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

在这里插入图片描述

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

还是以“龙凤呈祥”这个图案为例。如果换用其他的图案,请确保图案是.png格式(背景透明),且是方形的。同字体文件一样,我

们需要将这个背景图案的全路径文件名替换到代码中的BG_FILE常量即可。

在这里插入图片描述

完整代码

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

python学习交流Q群:906715085####
# -*- coding: utf-8 -*-
import os
import freetype
import numpy as np
from 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 = freetype.Face(font_file)    
face.set_char_size(size*size)        
face.load_char(word)    
btm_obj = face.glyph.bitmap    
w, h = btm_obj.width, btm_obj.rows    
pixels = np.array(btm_obj.buffer, dtype=np.uint8).reshape(h, w)        
dx = int(face.glyph.metrics.horiBearingX/64)    
if dx > 0:        
patch = np.zeros((pixels.shape[0], dx), dtype=np.uint8)        
pixels = np.hstack((patch, pixels))        
r = np.ones(pixels.shape) * color[0] * 255    
g = np.ones(pixels.shape) * color[1] * 255    
b = np.ones(pixels.shape) * color[2] * 255    
im = np.dstack((r, g, b, pixels)).astype(np.uint8)        
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')

 

样例

在这里插入图片描述

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:70 行 Python 代码写春联,行书隶书楷书随你选 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python迭代对象、迭代器与生成器

    关系图 1.可迭代对象(iterable) 一个具备__iter__()方法的对象,就是一个可迭代对象,但是要成为一个正常的可迭代对象那么就需要遵循协议。这个方法必须返 回一个迭代器。 可迭代协议: 含__iter__()方法。且可迭代对象中的__iter__()方法返回的是一个对应的迭代器。(如list对应的迭代器就是 list_iterator) 以下代…

    Python开发 2023年4月2日
    00
  • 5 个方便好用的 Python 自动化脚本,拿来就用

    前言 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作 效率。 编程世界里有各种各样的自动化脚本,来完成不同的任务。 尤其Python非常适合编写自动化脚本,因为它语法简洁易懂,而且有丰富的第三方工具库。 这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中。 1、自动化阅读网页…

    Python开发 2023年4月2日
    00
  • 用Python做了个图片识别系统(附源码)

    本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下PIL: PIL(Python Image Library)是一种免费的图像处理工具包,这个软件包提供了基本的图像处理功能,如:改变图像大小,旋转 图像,图像格式转化,色场空间转换(这个我不太懂),图像增强(就是改善清晰度,突出图像有用…

    Python开发 2023年4月2日
    00
  • Python—-异常处理、断言和路径处理,简单、清晰版

    1.路径处理 1.找模块:sys.path import sys print(sys.path)   – 1.理解 – 1.是python去查找包或模块 – 2.项目开始根目录,python内置的目录 – 3.虽然说python的安装目录下也可以存放我们写的模块,但是不建议(太多了,不大好找) – 4.如果以后你发现模块导入不了了 ,可以使用下sys.pat…

    Python开发 2023年4月2日
    00
  • Python 实现校园网自动登录

    背景 我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。 但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。 这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑) 这个时候可以用python脚本解…

    Python开发 2023年4月2日
    00
  • Python人脸识别签到考勤系统

    前言 本项目为IOT实验室人员签到考勤设计,系统实现功能: ◦人员人脸识别并完成签到/签退 ◦考勤时间计算 ◦保存考勤数据为CSV格式(Excel表格) PS:本系统2D人脸识别,节约了繁琐的人脸识别训练部分,简洁快捷 该项目为测试版,正式版会加入更多的功能,持续更新中… 测试版项目地址我会放到结尾 项目效果图 登陆界面 主界面展示图: 签到功能展示 签退功…

    Python开发 2023年4月2日
    00
  • 【Python】实现自动扫雷,挑战世界纪录

    前言 大家好,欢迎来到 Crossin的编程教室 ! 今天给大家分享的这个案例是用 Python+OpenCV 实现了自动扫雷,并突破了人类的世界记录。(当然 这不算哈) 咱们废话不多说,先看成果~ 中级 – 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第 一…

    Python开发 2023年4月2日
    00
  • Python+AI给老照片上色

    前言 哈喽,大家好。有没有谁跟我一样喜欢老照片的朋友,老照片总是让人感觉有一种情怀,可能这就是怀念吧。有一次无意中看到 了很久很久以前的照片都是黑白的,当时很想给照片添加点颜色,但是不知道怎么搞。今天,我终于发现了怎么去解决这个问 题,想了想,我决定得把这个分享给大家…   今天我们分享用NoGAN的图像增强技术给老照片着色。效果如下: 原图 上色后 NoG…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部