写春联pyrequestsPILmatplotlib
1 效果
2 说明
=====
2.1 参考来源https://blog.csdn.net/xufive/article/details/104059396
2.2 修改:对源代码的垂直对联V进行适当修改,用matplotlib展示图片。
3 代码
=====
3.1 第1步:导入模块import io import requests from PIL import Image import matplotlib.pyplot as plt #用来展示图片
3.2 第2步:定义函数,获取在线汉字样式def get_word(ch, quality): """获取单个汉字(字符)的图片 ch - 单个汉字或英文字母(仅支持大写) quality - 单字分辨率,H-640像素,M-480像素,L-320像素 """ # 把请求到的数据转换为Bytes字节流 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.3 第3步:获取对联背景图def get_bg(quality): """获取春联背景的图片""" return get_word("bg", quality)
3.4 第4步:写春联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) #列,一般是2 cols = max([len(item) for item in text_list]) if HorV == "V": #40+cols是与下边的距离,40+rows是与左边的距离 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") #春联的画布的底色是黄色,大小 out_im = Image.new("RGBA", (ow+2000, oh), "yellow") for row in range(rows): if HorV == "V": #row_im = Image.new("RGBA", (usize[quality][0], cols*usize[quality][0]), "white") row_im = Image.new("RGBA", (usize[quality][0], cols*usize[quality][0]), "yellow") #20是与上面的距离 #offset = (ow-(usize[quality][0]+10)*(row+1)-10, 20) #+4000是与左边的距离,左边对联 #+2000是与左边距离,右边对联 offset = (ow-(usize[quality][0]+2000)*(row+1)+4000, 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) #改进一下,用matplotlib显示图片 imgxx = plt.imread(out_file) plt.imshow(imgxx) plt.axis("off") plt.show() #用image显示 #out_im.show()
3.5 第5步:改成终端输入对联文字text=input("请输入对联:") #text = "普天同庆 欢度春节" #保存和显示图片 write_couplets(text, HorV="V", quality="M", out_file="chunlian.jpg") """ 例如:注意上联和下联之间有一个空格 爆竹声声辞旧岁 和风送暖迎新春 """
4 简洁完整的代码:import io import requests from PIL import Image import matplotlib.pyplot as plt def get_word(ch, quality): 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): 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+2000, oh), "yellow") for row in range(rows): if HorV == "V": row_im = Image.new("RGBA", (usize[quality][0], cols*usize[quality][0]), "yellow") offset = (ow-(usize[quality][0]+2000)*(row+1)+4000, 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) imgxx = plt.imread(out_file) plt.imshow(imgxx) plt.axis("off") plt.show() text=input("请输入对联:") write_couplets(text, HorV="V", quality="M", out_file="chunlian.jpg")
来写春联
河北一妈妈辅导孩子作业崩溃摔坏2平板加减法学不会还想玩游戏导语孩子连加减法都没搞明白,还只想着玩平板游戏,妈妈一气之下摔坏两个平板。近日,在河北保定,一个在家上网课的小女孩等到网课下课以后,迫不及待的就抱起了旁边闲置的平板开始玩游戏,丝毫
孕妇上火怎么办冬天因为天气干燥,一些孕妇容易出现上火症状,但孕期为了胎儿健康发育,又不能随意服用药物,那孕期上火只能忍着吗?重庆安琪儿妇产医院妇产医生温凯表示,孕妇上火切忌使用药物盲目去火,尤其
在家做家庭主妇培养孩子好呢还是上班好呢?在考虑是做主妇还是上班这个问题前,需要先想明白,孩子的成长对你来说有多重要?附整体养育概要孩子成长所需的基础和底层能力一个人的底层能力包括自信心复原力注意力自我调整能力情绪调整能力
妈。popo妈婴幼儿时期,妈是我们最亲近的人,虽然不能完全明白,但也慢慢的懂得,了解妈妈于我们的重要性。慢慢的成长长大经过小学,初中,再到踏入高中,让我们一天比一天清楚妈这个角色。她是我们的管家
教育学一刻也离不开儿童研究教育是什么?对于这个问题,我们应当保持必要的无知状态。保持这种无知状态,会促使我们不断尝试。对教育是什么的追问教育是什么?这是教育学开端处的问题,是教育思索无法省略的问题。人们往往
家庭教育宜有情依理还应守法王轶晰家庭教育宜有情依理还应守法针对家长焦虑学生课业负担过重的问题,家庭教育促进法专门提出父母和监护人应避免加重未成年人学习负担,呼应了双减政策。家长应做到四个方面,才能让家庭教育
教育听我说教育听我说当孩子出生之后,我们都希望他们能够成才,在班级中成为一个学霸,这似乎已经成为了所有父母的期望了,但现实生活中有多少孩子能够成为父母心中的模样呢?一个孩子将来聪不聪明跟大脑
教育理念心得教育听我说学前教育心得体会1学前教育是指出生至六七岁儿童的教育,包括学前社会教育和家庭教育。它的教育任务和要求是重视幼儿的身体健康和个性发展及良好习惯的养成,重视学前儿童智力发展和
我的生产记录育儿事务所2020年10月17日凌晨六点破羊水,家婆一直说要煮粥,吃完粥再去医院,老公又不在家里,赶紧打电话给老公,还好老公夜班在线,他赶紧打给他让我家婆别煮饭了,赶紧陪我去医院七
产后腰痛别让打麻醉背锅在门诊中常常遇到产后腰部疼痛的病人,尤其是分娩镇痛或剖腹产后的妈妈,而多数妈妈都认为她们的腰痛是麻醉医生打麻醉引起的。其实这可冤枉了麻醉医生。通过我们多年的临床诊治经验来看,虽然这
青春期的孩子难相处?家长要懂得做到以下这几点每个孩子都有自己的青春期,而因为不同孩子的心理,生理成熟期不同,进入到青春期的年龄也不一样,但是不管是哪个年龄段进入到青春期的孩子,都会出现以下这个几个特点1自主意识变得强烈在进入