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 实现校园网自动登录

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

    Python开发 2023年4月2日
    00
  • Python爬取站长之家网页信息(附详细源码)

    一、实验目的 在信息时代高速发展的现在,“互联网+”的使用日趋zhanzhang过互联网学习知识,传递思想,沟通交流,在众多数据和用户的碰 撞中,互联网经济应运而生。学会利用网络收集信息是最基本的要求,接下来,我将以“行业网站”——站长之 家为例,通过Python爬取各个网站的信息(主要为名称、Alexa周排名、反链数等)来更直观、准确地分析其中各个网站在互…

    Python开发 2023年4月2日
    00
  • Python人工智能之图片识别,一行代码实现图片文字识别

    我们以识别诗词为例下面是我们要识别的图片 先看下效果图 我们运行代码后识别的结果,有几个字没有正确识别,但是大多数字都能识别出来。 一行代码就能识别图片,我们背后要做些准备工作的 •这里我们需要用到两个库:pytesseract和PIL •同时我们还需要安装识别引擎tesseract-ocr 下面就来讲讲这几个库的安装,因为只有这几个库安装好以后Python…

    Python开发 2023年4月2日
    00
  • Python 数据分析之双色球高频数据统计

    基础数据准备 基础数据是通过爬虫获取到。 以下是从第一期03年双色球开奖号到今天的所有数据整理,截止目前一共2549期,balls.txt 文件内容如下 Python 代码实现 分析数据特征和数据处理方式选择 python学习交流Q群:906715085### #导入Counter from collections import Counter def re…

    Python开发 2023年4月2日
    00
  • 基于 Python 的地理空间绘图(附源码)

    前言 大部分情况下,地理绘图可使用 Arcgis 等工具实现。但正版的 Arcgis 并非所有人可以承受。本文基于 Python 的 cartopy 和 matplotlib 等库,为地理空间绘图的代码实现提供参考。 所有所需库如下: gma、cartopy、matplotlib、numpy   更多内容可转到:地理与气象分析库—-使用指南(点击阅读原文…

    Python开发 2023年4月2日
    00
  • 教你用python爬取美女照片,未成年不能学

    又到每天Python小技巧分享的时候了,今天给大家分享的是怎么样去爬取清纯小姐姐照片(没有人会拒绝美女吧,小声说),这篇文章好像有点刺激,未成年的小伙伴就不要进来了。快来看看这些清纯的小姐姐的容颜,话不多说,上教程。 先来看看效果图 不好意思,图片有点辣眼睛,被拦截了,还没有还给我….. import re import requests import …

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

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

    Python开发 2023年4月2日
    00
  • 用Python制作销售数据可视化看板,展示分析一步到位

    前言 在数据时代,销售数据分析的重要性已无需赘言。 只有对销售数据的准确分析我们才有可能找准数据变动(增长或下滑)的原因。 然后解决问题、发现新的增长点才会成为可能! 今天就给大家介绍一个用Python制作销售数据大屏的方法。 主要使用Python的Streamlit库、Plotly库、Pandas库进行搭建。 其中Pandas处理数据,Plotly制作可视…

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