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 使用SMTP发送邮件的代码小结
Sep 21 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
Python之re操作方法(详解)
Jun 14 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
python实现图片上添加图片
Nov 26 Python
Python socket聊天脚本代码实例
Jan 02 Python
python通过移动端访问查看电脑界面
Jan 06 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
PyQt5爬取12306车票信息程序的实现
May 14 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代码实现支付宝批量付款
2015/12/24 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
动态控制Table的js代码
2007/03/07 Javascript
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
Python多线程编程(一):threading模块综述
2015/04/05 Python
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
企业消防安全制度
2014/02/02 职场文书
简历中的自我评价范文
2014/02/05 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
给公司的建议书范文
2014/05/13 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
五一晚会主持词
2015/07/01 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
浅谈Python numpy创建空数组的问题
2021/05/25 Python