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 13 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
使用python实现链表操作
Jan 26 Python
python实现Decorator模式实例代码
Feb 09 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
对于Python深浅拷贝的理解
Jul 29 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
pandas to_excel 添加颜色操作
Jul 14 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
Aug 27 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 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实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
PHP微商城开源代码实例
2019/03/27 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
jQuery 源码分析笔记(4) Ready函数
2011/06/02 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python中函数传参详解
2016/07/03 Python
python字典操作实例详解
2017/11/16 Python
使用python实现ANN
2017/12/20 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
中学教师管理制度
2014/01/14 职场文书
表彰会主持词
2014/03/26 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书