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 09 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
利用python画一颗心的方法示例
Jan 31 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
Django静态资源部署404问题解决方案
May 11 Python
Python绘图之二维图与三维图详解
Aug 04 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可变函数的经典用法
2013/06/20 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
Javascript基础教程之数组 array
2015/01/18 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
原生JS实现N级菜单的代码
2017/05/21 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
JavaScript写个贪吃蛇小游戏(超详细)
2020/03/17 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
python 获取et和excel的版本号
2009/04/09 Python
python实现绘制树枝简单示例
2014/07/24 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
python中的print()输出
2019/04/12 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
python实现ftp文件传输功能
2020/03/20 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
物流创业计划书
2014/02/01 职场文书
成本会计实训报告
2014/11/05 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript