用python寫一個(gè)福字(附完整代碼)
前言:
支付寶 2022 集五?;顒?dòng)正式開啟
數(shù)據(jù)顯示,過(guò)去六年累計(jì)參與支付寶集五福的人數(shù)已經(jīng)超過(guò)了 7 億,每 2 個(gè)中國(guó)人里就有 1 個(gè)曾掃福、集福、送福。
一,掃五?;顒?dòng)如此火爆,為何不自己利用編程來(lái)生成福字!
首先作品奉上:
①,導(dǎo)入python庫(kù)
import io from PIL import Image import requests
②,利用爬蟲,獲取單個(gè)漢字
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_word 的作用為爬取我們需要的漢字模型。
如圖:
③,爬取背景底圖
def get_bg(quality): return get_word('bg', quality)
④,圖片格式大小,配置函數(shù)
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, 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()
⑤,成品展示
二,完整代碼
完整代碼奉上,需要先安裝需要的python庫(kù)。
import io from PIL import Image import requests 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, 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='V', quality='M', out_file='福.jpg')
三,總結(jié)
到此這篇關(guān)于用python寫一個(gè)福字(附完整代碼)的文章就介紹到這了,更多相關(guān)python寫福字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python神經(jīng)網(wǎng)絡(luò)facenet人臉檢測(cè)及keras實(shí)現(xiàn)
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)facenet人臉檢測(cè)及keras實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05windowns使用PySpark環(huán)境配置和基本操作
pyspark是Spark對(duì)Python的api接口,可以在Python環(huán)境中通過(guò)調(diào)用pyspark模塊來(lái)操作spark,這篇文章主要介紹了windowns使用PySpark環(huán)境配置和基本操作,感興趣的可以了解一下2021-05-05修復(fù)CentOS7升級(jí)Python到3.6版本后yum不能正確使用的解決方法
這篇文章主要介紹了修復(fù)CentOS7升級(jí)Python到3.6版本后yum不能使用的問(wèn)題,本文給大家?guī)?lái)了解決方法,需要的朋友可以參考下2018-01-01python光學(xué)仿真實(shí)現(xiàn)光線追跡之空間關(guān)系
這篇文章主要介紹了python光學(xué)仿真中實(shí)現(xiàn)光線追跡的空間關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10Python如何實(shí)現(xiàn)自動(dòng)發(fā)送郵件
對(duì)于一些每天需要發(fā)的報(bào)表或者是需要一次發(fā)送多份的報(bào)表,我們可以考慮借助Python來(lái)自動(dòng)發(fā)送郵件。本文主要介紹了如何利用Python實(shí)現(xiàn)自動(dòng)發(fā)送郵件,感興趣的小伙伴可以了解一下2021-11-11Python字典中的值為列表或字典的構(gòu)造實(shí)例
今天小編就為大家分享一篇Python字典中的值為列表或字典的構(gòu)造實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12