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基础之字符编码
Jun 14 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
python实现五子棋小游戏
Mar 25 Python
python挖矿算力测试程序详解
Jul 03 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
Python实现发票自动校核微信机器人的方法
May 22 Python
Python设计密码强度校验程序
Jul 30 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 Python
Python使用pyecharts控件绘制图表
Jun 05 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
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
window.name代替cookie的实现代码
2010/11/28 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
分享python数据统计的一些小技巧
2016/07/21 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
python线程join方法原理解析
2020/02/11 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
英语自荐信范文
2013/12/11 职场文书
2014年创卫实施方案
2014/02/18 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
欢迎词范文
2015/01/27 职场文书
中学后勤工作总结2015
2015/07/22 职场文书
如何写好竞聘报告
2019/04/03 职场文书