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创建和删除目录的方法
Apr 29 Python
python自定义类并使用的方法
May 07 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
Python Cookie 读取和保存方法
Dec 28 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
python 进程池pool使用详解
Oct 15 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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
使用adodb lite解决问题
2006/12/31 PHP
php intval的测试代码发现问题
2008/07/27 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
python leetcode 字符串相乘实例详解
2018/09/03 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
计划生育诚信协议书
2014/11/02 职场文书
青年文明号申报材料
2014/12/23 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js
python实现会员信息管理系统(List)
2022/03/18 Python
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python