Python生成书法春联代码示例(支持行书、隶书、楷书)

陈默
陈默
发布时间:2026-10-15| 6人浏览过
原创

本文提供使用Python生成书法春联的完整代码示例,支持行书、隶书和楷书等多种字体。通过调用系统字体文件与透明背景图片,利用PIL和freetype库实现汉字矢量渲染与合成。文中详细说明了如何配置字体路径与背景图案参数,并展示了最终生成的春联效果,供编程技术学习参考。

本示例代码仅供编程技术学习使用,作者无意侵犯任何字体版权人的合法权益,特此声明。

选择矢量字库

尽管存在多种方法可以列出系统支持的所有字体文件,但最直接的方式是查看操作系统的字体目录。以Windows系统为例,直接在C:\Windows\Fonts路径下即可找到“华文隶书”字库文件,通过查看属性可知其文件名为STLITI.TTF。选定喜欢的字库后,只需将包含该字库的全路径文件名替换到代码中的FONT_FILE常量即可,无需进行其他额外操作。

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

此处仍以“龙凤呈祥”图案为例进行说明。若需更换其他背景图案,请确保所选图案为.png格式且背景透明,同时保持方形比例。与配置字体文件类似,只需将该背景图案的全路径文件名替换到代码中的BG_FILE常量即可完成设置。

完整代码

全部代码总计70余行,具体使用方法请参照代码中的注释说明。

# -*- 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')

效果展示

至此,关于Python编写春联的示例代码(支持行书、隶书、楷书)的介绍已完毕。如需了解更多相关Python春联内容,建议搜索本站历史文章或继续浏览后续相关文章,希望大家今后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。