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局部赋值的规则
Mar 07 Python
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
python下10个简单实例代码
Nov 15 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
win8下python3.4安装和环境配置图文教程
Jul 31 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
Pytorch之保存读取模型实例
Dec 30 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 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
Phpbean路由转发的php代码
2008/01/10 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
js解决movebox移动问题
2016/03/29 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
python编写爬虫小程序
2015/05/14 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
党校培训思想汇报
2014/01/03 职场文书
公证书标准格式
2014/04/10 职场文书
希特勒的演讲稿
2014/05/23 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
党员剖析材料范文
2014/12/18 职场文书
学术会议通知
2015/04/15 职场文书
高中政治教学反思
2016/02/23 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书