脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python编写春联的示例代码(支持行书隶书楷书)

Python编写春联的示例代码(支持行书隶书楷书)

2022-08-31 10:27天元浪子 Python

这篇文章主要介绍了如何通过Python代码编写春联,其中春联字体支持行书隶书楷书。文中的示例代码讲解详细,感兴趣的小伙伴可以动手试一试

仅供学习编程技术之用,绝无侵犯字体权利人之权力的故意,特此声明。

选择矢量字库

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

Python编写春联的示例代码(支持行书隶书楷书)

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

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

Python编写春联的示例代码(支持行书隶书楷书)

完整代码

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# -*- 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编写春联的示例代码(支持行书隶书楷书)的文章就介绍到这了,更多相关Python春联内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/xufive/article/details/122623982

延伸 · 阅读

精彩推荐
  • PythonPython Flask-web表单使用详解

    Python Flask-web表单使用详解

    这篇文章主要为大家详细介绍了Python Flask-web表单的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    潇潇、寒3712020-12-19
  • Pythonpython实现统计代码行数的方法

    python实现统计代码行数的方法

    这篇文章主要介绍了python实现统计代码行数的方法,涉及Python中os模块及codecs模块的相关使用技巧,需要的朋友可以参考下 ...

    小小的我6602020-07-05
  • Pythonpython实现简易版学生成绩管理系统

    python实现简易版学生成绩管理系统

    这篇文章主要为大家详细介绍了python实现简易版学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Code进阶狼人20622020-06-23
  • Pythonpython openpyxl的使用方法

    python openpyxl的使用方法

    Python借助openpyxl可以对xlsx文件进行操作,帮助大家高效办公,处理excel文件,下面就介绍一下相关的方法,以及一个小例子。...

    临时营地7312021-12-07
  • PythonPython爬虫的两套解析方法和四种爬虫实现过程

    Python爬虫的两套解析方法和四种爬虫实现过程

    本文想针对某一网页对 python 基础爬虫的两大解析库( BeautifulSoup 和 lxml )和几种信息提取实现方法进行分析,及同一网页爬虫的四种实现方式,需要的朋...

    Python火火10842021-03-19
  • PythonPython编程入门之Hello World的三种实现方式

    Python编程入门之Hello World的三种实现方式

    这篇文章主要介绍了Python编程入门之Hello World的三种实现方式,实例分析了print输出函数的使用及控制台输出的相关技巧,具有一定参考借鉴价值,需要的朋友可...

    ifaithu3522020-08-03
  • Pythonpython获取指定时间差的时间实例详解

    python获取指定时间差的时间实例详解

    这篇文章主要介绍了python获取指定时间差的时间实例详解的相关资料,需要的朋友可以参考下...

    Python教程网3772020-09-29
  • Pythonpython 调用c语言函数的方法

    python 调用c语言函数的方法

    本篇文章主要介绍了python 调用c语言函数的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    fk121388982020-12-10