Python制作春联的示例代码


Posted in Python onJanuary 22, 2022

1. 前言

春联是中国传统文化中最具内涵的元素之一,它以对仗工整、简洁精巧的文字描绘美好形象,抒发美好愿望,是中国特有的文学形式,是华人们过年的重要习俗。每逢春节期间,无论城市还是农村,家家户户都要精选一副大红春联贴于门上,辞旧迎新,以增加节日的喜庆气氛。据考证,这一习俗起于宋代,盛于明代。有据可查的最早的春联是“三阳始布,四序初开”,始见于莫高窟藏经洞出土的文物中,撰联人为唐人刘丘子,作于开元十一年(公元723年)。

Python制作春联的示例代码

我们这个时代的程序员,大多只是粗通文墨,毛笔字也基本不怎么会写。然而,对于美好生活的向往,那可是一点都不比文人墨客少。借助于代码,我们同样可以写出漂亮的春联,同样可以向家人邻居朋友同事送上我们最真诚的祝福和最美好的祈愿。

Python制作春联的示例代码

下面,我就给大家展示一下,如何用Python写春联,全部代码大约70行。代码中用到的字模均来源于网络,共计1550个常用汉字。如有侵权,我会立即停止服务并删除。

2. 代码中需要导入的模块

import io
from PIL import Image
import numpy as np
import requests

3. 下载字模

def get_word(ch, quality):
    """获取单个汉字(字符)的图片
    ch          - 单个汉字或英文字母(仅支持大写)
    quality     - 单字分辨率,H-640像素,M-480像素,L-320像素
    """
    
    fp = io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk', data={'ch':ch}).content)
    im = Image.open(fp)
    w, h = im.size
    if quality == 'M':
        w, h = int(w*0.75), int(0.75*h)
    elif quality == 'L':
        w, h = int(w*0.5), int(0.5*h)
    
    return im.resize((w,h))

4. 下载龙凤呈祥背景底图

def get_bg(quality):
    """获取春联背景的图片"""
    
    return get_word('bg', quality)

5. 生成春联

def write_couplets(text, HorV='V', quality='L', out_file=None):
    """生成春联
    
    text        - 春联内容,以空格断行
    HorV        - H-横排,V-竖排
    quality     - 单字分辨率,H-640像素,M-480像素,L-320像素
    out_file    - 输出文件名
    """
    
    usize = {'H':(640,23), 'M':(480,18), 'L':(320,12)}
    bg_im = get_bg(quality)
    text_list = [list(item) for item in text.split()]
    rows = len(text_list)
    cols = max([len(item) for item in text_list])
    
    if HorV == 'V':
        ow, oh = 40+rows*usize[quality][0]+(rows-1)*10, 40+cols*usize[quality][0]
    else:
        ow, oh = 40+cols*usize[quality][0], 40+rows*usize[quality][0]+(rows-1)*10
    out_im = Image.new('RGBA', (ow, oh), '#f0f0f0')
    
    for row in range(rows):
        if HorV == 'V':
            row_im = Image.new('RGBA', (usize[quality][0], cols*usize[quality][0]), 'white')
            offset = (ow-(usize[quality][0]+10)*(row+1)-10, 20)
        else:
            row_im = Image.new('RGBA', (cols*usize[quality][0], usize[quality][0]), 'white')
            offset = (20, 20+(usize[quality][0]+10)*row)
        
        for col, ch in enumerate(text_list[row]):
            if HorV == 'V':
                pos = (0, col*usize[quality][0])
            else:
                pos = (col*usize[quality][0],0)
            
            ch_im = get_word(ch, quality)
            row_im.paste(bg_im, pos)
            row_im.paste(ch_im, (pos[0]+usize[quality][1], pos[1]+usize[quality][1]), mask=ch_im)
            
        out_im.paste(row_im, offset)
    
    if out_file:
        out_im.convert('RGB').save(out_file)
    out_im.show()

6. 测试样例

6.1 普天同庆 欢度春节

text = '普天同庆 欢度春节'
write_couplets(text, HorV='V', quality='M', out_file='普天同庆.jpg')

Python制作春联的示例代码

6.2 年尽岁除岁月如歌 冬去春来春光似画

text = '年尽岁除岁月如歌 冬去春来春光似画'
write_couplets(text, HorV='H', quality='M', out_file='岁月如歌.jpg')

Python制作春联的示例代码

6.3 人世间纵有百娇千红 唯独你是我情之所钟

text = '人世间纵有百娇千红 唯独你是我情之所钟'
write_couplets(text, HorV='H', quality='M', out_file='情之所钟.jpg')

Python制作春联的示例代码

到此这篇关于Python制作春联的示例代码的文章就介绍到这了,更多相关Python春联内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
Python实现随机选择元素功能
Sep 14 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
python list格式数据excel导出方法
Oct 31 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
Python命令行click参数用法解析
Dec 19 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
Python制作表白爱心合集
基于Python实现一个春节倒计时脚本
Jan 22 #Python
详解Python如何批量采集京东商品数据流程
Jan 22 #Python
用Python实现屏幕截图详解
Jan 22 #Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 #Python
django中websocket的具体使用
Jan 22 #Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 #Python
You might like
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
1 Tube Radio
2021/03/02 无线电
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
JS之小练习代码
2008/10/12 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
Js实现粘贴上传图片的原理及示例
2020/12/09 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python代码编写计算器小程序
2020/03/30 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
教师推荐信范文
2013/11/24 职场文书
运动会开幕式解说词
2014/02/05 职场文书
公司股东合作协议书
2014/09/14 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python