用python写春联,我还是第一次见(代码片段)

果果小师弟 果果小师弟     2023-03-09     423

关键词:

春节,即中国农历新年,俗称新春、新岁、岁旦等,口头上又称过年、过大年。春节历史悠久,由上古时代岁首祈岁祭祀演变而来。在春节期间,全国各地均有举行各种庆贺新春活动,这些活动以除旧布新、驱邪攘灾、拜神祭祖、纳福祈年为主要内容,形式丰富多彩,凝聚着中华传统文化精华。

每逢春节,无论城市还是农村,家家户户都要挑漂亮的红春联贴于门上,辞旧迎新,增加喜庆的节日气氛。春联的另一来源是春贴,古人在立春日多贴“宜春”二字,后渐渐发展为春联,表达了中国劳动人民一种辟邪除灾、迎祥纳福的美好愿望。 世界纪录协会收录的世界最早的春联是“三阳始布;四序初开”,这副春联记载在莫高窟藏经洞出土的敦煌遗书上,撰联人为唐人刘丘子,作于开元十一年723年。

程序员借助于代码,同样可以写出漂亮的春联,这里我向大家送上我最真诚的祝福和最美好的祈愿。

接下来就教大家如何用代码生成上面那样的对联了!

一、安装Python环境

1.在百度输入Pyth官网,回车。搜索结果中第一条就是官网的网址www.python.org

2.这是一个英文的网站,如果你用的是谷歌浏览器,可以使用自带的谷歌将网站翻译成中文的。这样看起来就非常的方便。在网页的上方有一排菜单栏,点击“DownLoads”,在下拉列表中点击第三个菜单“Windows

3.在这里下载python安装包。要根据你电脑的位数下载对应的安装包。现在绝大多数人的电脑都是64位的。这里我们选择Windows x86-64 executable installer,双击下载得到的python-3.8.1-amd64.exe,就可以正式开始安装 Python 了。

下载后傻瓜式安装即可!

4.安装完成以后,进入桌面同时按下win+右键,会看到在此处打开Powershell窗口(S)在窗口中输入python.exe命令(注意字母.是实心的),如果出现Python的版本信息,并看到命令提示符>>>,就说明安装成功了,如下图所示。

二、安装相应的库

按下键盘的WIN+R键导出命令窗口,依次出入下面三条命令进行安装即可。

pip install Pillow
pip install numpy
pip install requests

三、编写代码

这里的代码借鉴的网上的,如有侵权,我停止服务并删除!

1.导入以下模块

import io
from PIL import Image
import numpy as np
import requests

2.下载字模

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))

3.生成春联

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()

四、完整春联

import io
from PIL import Image
import numpy as np
import requests
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))
def get_bg(quality):
    """获取春联背景的图片"""
 
    return get_word('bg', quality)
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()
text = '牛聚成云天降玉 虎来踏露地生金'
write_couplets(text, HorV='H', quality='M', out_file='欢度春节.jpg')

等待十几秒钟,即可生成对联,对联生成得我格式的.png的形式。

再来一个牛舞烟花报捷去 虎持金捧送春来

再来一个

text1 = '虎跃龙腾生紫气 风调雨顺兆丰年'
text2 = '虎跃龙腾'
write_couplets(text1, HorV='H', quality='M', out_file='上下批.jpg')
write_couplets(text2, HorV='H', quality='M', out_file='横批.jpg')

最后

抗击疫情,从我做起,人人有责!

代码写春联js+html版本与python版本

一、春联一1.前言需要代码文末公众号找我回复【春联】即可获取效果展示3.代码展示index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>css3春联切换</title><linkrel 查看详情

假期第一天,第一次见丈母娘~(代码片段)

...了趟医院,和我对象的妈妈一块儿去的,且还是第一次见,心理忐忑不安的。。。。事由昨天晚上,我还在公司加班写代码呢,我对象给我说,他妈妈要去医院,做个检查啥的,她陪着打车去的&# 查看详情

新年快到了,如何运用python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面... 查看详情

新年快到了,如何运用python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面... 查看详情

新年快到了,如何运用python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面... 查看详情

25个vue技巧,开发了5年了,有些竟然还是第一次见!(代码片段)

作者:MichaelThiessen译者:前端小智来源:dev有梦想,有干货,微信搜索【大迁世界】关注这个在凌晨还在刷碗的刷碗智。本文GitHubhttps://github.com/qq449245884/xiaozhi已收录,有一线大厂面试完整考点、资料以及... 查看详情

在外打工好久不回老家,用python为家里贴上新年春联

...春联;旧年辞别迎新岁,时序车轮总向前。”所以今天用Python写一副春联&福字送给大家,本文我们主要用到的Python库为 tkinter,库下面一起来看一下具体代吗吧。目录唠叨神话初始化制作上联 查看详情

用canvas写一个简单的游戏--别踩白块儿(代码片段)

  第一次写博客也不知怎么写,反正就按照我自己的想法来吧!怎么说呢?还是不要扯那些多余的话了,直接上正题吧!第一次用canvas写游戏,所以挑个简单实现点的来干:别踩白块儿,其他那些怎么操作的那些就不用再扯了... 查看详情

海龟库画春联怎么画

Python就好比编程界的瑞士军刀,开箱即用、无所不能。这得益于Python简洁易用的语法,以及丰富的第三方库,你想在电脑上做什么,总能找到事半功倍的第三方库。比如,在这新春佳节之际,用Python来写个春联能做到吗?用Python... 查看详情

抖音去水印小程序太坑了,每天只能下载一个还要钱。还是自己用python写一个得劲(代码片段)

...一个,不然你就得开会员想了个法子为什么不自己用Python爬呢?第一步首先看一下直接访问抖音得到的结果接下来打开浏览器的开发者工具,看看视频的地址。 接下来就是重点了,首先你需要让你的浏览器能够... 查看详情

抖音去水印小程序太坑了,每天只能下载一个还要钱。还是自己用python写一个得劲(代码片段)

...一个,不然你就得开会员想了个法子为什么不自己用Python爬呢?第一步首先看一下直接访问抖音得到的结果接下来打开浏览器的开发者工具,看看视频的地址。 接下来就是重点了,首先你需要让你的浏览器能够... 查看详情

用markdown写博客,看这一篇就够了,附markdown文件分享(代码片段)

...markdown博客还是不得已的“回滚”了。传送门:记录一下第一次用markdown写博客回滚过程“痛定思痛”,简单总结后,再次出发。1.第一次用markdown写博客失败的原因分析markdown语法根本上还是不熟悉实话说,虽然以前用过markdown,... 查看详情

事件驱动(代码片段)

...游戏框架,框架中用到了多态,函数式编程和事件驱动编程,第一次看到事件驱动的时候,就想到跟观察者模式很像. 事件驱动初上手感觉还很好用,在我自己写的项目里,要写很多爬虫,比如下面爬虫的例子,我只是想关心拼接URL地址... 查看详情

事件驱动编程(代码片段)

...游戏框架,框架中用到了多态,函数式编程和事件驱动编程,第一次看到事件驱动的时候,就想到跟观察者模式很像.事件驱动初上手感觉还很好用,在我自己写的项目里,要写很多爬虫,比如下面爬虫的例子,我只是想关心拼接URL地址,和... 查看详情

38一次younggcfullgc的调试(代码片段)

...来调试这个场景,但是和我最开始的想法差的有点远,不过还是有很大的收货,这块的代码虽然调试了很多次了,但是对于细节的把控还是差的很多 比如这次的这个测试用例,就和我心中的期望差距很大  以下代码,截图基于jdk9 测试... 查看详情

python写爬虫-爬甘农大学校新闻(代码片段)

Python写网络爬虫(一)关于Python:学过C.学过C++.最后还是学Java来吃饭. 一直在Java的小世界里混迹.有句话说:“Lifeisshort,youneedPython!” 翻译过来就是: 人生苦短,我用Python究竟它有多么强大, 多么简洁?抱着这个好奇心,趁不忙的... 查看详情

python写爬虫-爬甘农大学校新闻(代码片段)

Python写网络爬虫(一)关于Python:学过C.学过C++.最后还是学Java来吃饭. 一直在Java的小世界里混迹.有句话说:“Lifeisshort,youneedPython!” 翻译过来就是: 人生苦短,我用Python究竟它有多么强大, 多么简洁?抱着这个好奇心,趁不忙的... 查看详情

python--函数详解(代码片段)

函数的作用我种地要用锄头,我是每次用时重新做一把锄头,还是提前做好一把锄头,需要时直接拿来用?很显然,每次重新做都是重复劳动,所以我们选择提前做好一把,每次直接拿来用,这里面就是一种复用的思想.如果需要频繁... 查看详情