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文件扩展名和文件名方法
Feb 02 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
python pandas库的安装和创建
Jan 10 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
解决安装pyqt5之后无法打开spyder的问题
Dec 13 Python
python自动识别文本编码格式代码
Dec 26 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
TensorFLow 数学运算的示例代码
Apr 21 Python
什么是python的自省
Jun 21 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
解析dedeCMS验证码的实现代码
2013/06/07 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
提高网站信任度的技巧
2008/10/17 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
Prototype Array对象 学习
2009/07/19 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
python怎么删除缓存文件
2020/07/19 Python
浅析Python requests 模块
2020/10/09 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
世界上最大的艺术社区:SAA
2020/12/30 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
付款委托书范本
2014/10/05 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
求职推荐信范文
2015/03/27 职场文书
结婚主持人致辞
2015/07/28 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
合作意向书范本
2019/04/17 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript