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实现文件快照加密保护的方法
Jun 30 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
Python学习小技巧之列表项的排序
May 20 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
keras之权重初始化方式
May 21 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 Python
自学python用什么系统好
Jun 23 Python
深入理解Python变量的数据类型和存储
Feb 01 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
微信支付扫码支付php版
2016/07/22 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
21行Python代码实现拼写检查器
2016/01/25 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
解决Python二维数组赋值问题
2019/11/28 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
社团活动总结范文
2014/04/26 职场文书
2015年校长新年寄语
2014/12/08 职场文书
万能检讨书
2015/01/27 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang